Docker
能解决的问题
⾸先,我们先来看⼏个问题:
1.
合作开发的时候,在本机可以运⾏,在别⼈的电脑上跑不起来。
这⾥我们以
Java Web
应⽤程序为例,⼀个
Java Web
应⽤程序涉及很多东⻄,⽐如
JDK
、
Tomcat
、
Spring
等等。当
这些其中某⼀项版本不⼀致的时候,可能就会导致应⽤程序跑不起来这种情况。
Docker
则将程序直接打包成镜像,
直接运⾏在容器中即可。
2.
服务器⾃⼰的程序挂了,结果发现是别⼈程序出了问题把内存吃完了,⾃⼰程序因为内存不够就挂了。
这种也是⼀种⽐较常⻅的情况,如果你的程序重要性不是特别⾼的话,公司基本上不可能让你的程序独享⼀台服务
器的,这时候你的服务器就会跟公司其他⼈的程序共享⼀台服务器,所以不可避免地就会受到其他程序的⼲扰,导
致⾃⼰的程序出现问题。
Docker
就很好解决了环境隔离的问题,别⼈程序不会影响到⾃⼰的程序。
3.
测试阶段能运⾏和上线出现问题。
开发阶段部署⼀套软件环境,测试⼈员在开发中测试没有问题,运维进⾏部署(同⼀套代码)。但是正式部署到服
务器时,发⽣了问题(启动参数、环境问题、漏配了参数)等意外。
4.
公司要弄⼀个活动,可能会有⼤量的流量进来,公司需要再多部署⼏⼗台服务器。
在没有
Docker
的情况下,要在⼏天内部署⼏⼗台服务器,这对运维来说是⼀件⾮常折磨⼈的事,⽽且每台服务器的
环境还不⼀定⼀样,这时就会出现各种问题,最后部署地头⽪发麻。⽤
Docker
的话,我只需要将程序打包到镜像,
你要多少台服务,我就给你跑多少容器,极⼤地提⾼了部署效率。
5.
微服务环境搭建问题。
随着微服务技术的兴起,⼀个⼤的应⽤需要拆分成多个微服务。多个微服务的⽣成,就会⾯临庞⼤系统的部署效
率,开发协同效率问题。然后通过服务的拆分,数据的读写分离、分库分表等⽅式重新架构,⽽且这种⽅式如果要
做的彻底,需要花费⼤量⼈⼒物⼒。可能需要部署很多个服务器。
6.
容器版本管理。
持续的软件版本发布、测试项⽬到线上环境的集成。⽤户可以⽅便地创建和使⽤容器,把⾃⼰的应⽤放⼊容器。容
器还可以进⾏版本管理、复制、分享、修改,就像管理普通的代码⼀样。
为什么使⽤Docker
1.
简化程序
Docker
让开发者可以打包他们的应⽤以及依赖包到⼀个可移植的容器中,然后发布到任何流⾏的
Linux
机器上,便
可以实现虚拟化。
Docker
改变了虚拟化的⽅式,使开发者可以直接将⾃⼰的成果放⼊
Docker
中进⾏管理。⽅便快
捷已经是
Docker
的最⼤优势,过去需要⽤数天乃⾄数周的任务,在
Docker
容器的处理下,只需要数秒就能完成。
2.
避免选择恐惧症
如果你有选择恐惧症,还是资深患者。
Docker
帮你打包你的纠结!
Docker
镜像中包含了运⾏环境和配置,所以
Docker
可以简化部署多种应⽤实例⼯作。⽐如
Web
应⽤、后台应⽤、数据库应⽤、⼤数据应⽤,再如
Hadoop
集
群、消息队列等都可以打包成⼀个镜像部署。
3.
节省开⽀
⼀⽅⾯,云计算时代到来,使开发者不必为了追求效果⽽配置⾼额的硬件,
Docker
改变了⾼性能必然⾼价格的思维
定势。
Docker
与云的结合,让云空间得到更充分的利⽤。不仅解决了硬件管理的问题,也改变了虚拟化的⽅式。
4.
持续交付和部署
对开发和运维(
DevOps
)⼈员来说,最希望的就是⼀次创建或配置,可以在任意地⽅正常运⾏。使⽤
Docker
可以
通过定制应⽤镜像来实现持续集成、持续交付、部署。开发⼈员可以通过
Dockerfile
来进⾏镜像构建,并结合持续
集成(
Continuous Integration
)系统进⾏集成测试,⽽运维⼈员则可以直接在⽣产环境中快速部署该镜像,甚⾄
结合持续部署(
Continuous Delivery/Deployment
)系统进⾏⾃动部署。⽽且使⽤
Dockerfile
使镜像构建透明化,
不仅仅开发团队可以理解应⽤运⾏环境,也⽅便运维团队理解应⽤运⾏所需条件,帮助更好的⽣产环境中部署该镜
像。
5.
更轻松的迁移
由于
Docker
确保了执⾏环境的⼀致性,使得应⽤的迁移更加容易。
Docker
可以在很多平台上运⾏,⽆论是物理
机、虚拟机、公有云、私有云,甚⾄是笔记本,其运⾏结果是⼀致的。因此⽤户可以很轻易的将在⼀个平台上运⾏
的应⽤,迁移到另⼀个平台上,⽽不⽤担⼼运⾏环境的变化导致应⽤⽆法正常运⾏的情况。
Docker特点
标准化交付:
Docker
将应⽤打包成标准化单元,⽤于交付、部署。
轻量级:容器及包含了软件运⾏所需的所有环境,⽽且⾮常轻量级。
⾼可靠:容器化的应⽤程序,可以在任何
Linux
环境中始终如⼀的运⾏。
隔离性:容器化的应⽤程序,具备隔离性,这样多团队可以共享同⼀
Linux
系统资源。
Docker
安装
1.
切换到
root
账户,并输⼊
root
⽤户密码。
su root
2.
查看电脑上是否已经安装
Docker
软件。
yum list installed | grep docker
3.
如果已经安装过
Docker
,先卸载已安装的
Docker
,执⾏如下命令。如果报告未安装这些包,则没有问题
sudo yum remove docker docker-client docker-client-latest docker-common docker-latestdocker-latest-logrotate docker-logrotate docker-engine
4.
安装所需的软件包。
yum-utils
提供了
yum-config-manager
应⽤,并
device-mapper-persistent-data
和
lvm2
由
需要
devicemapper
存储驱动程序
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5.
设置
Docker
镜像的仓库,添加软件源信息。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7.
Docker
要求
CentOS
系统的内核版本⾼于
3.10
,通过
uname -r
命令查看你当前的内核版本是否⽀持安装
Docker
。
uname -r
8.
安装
Docker-CE
软件。
docker-ce 表示社区免费版本yum -y install docker-ce
6.
更新
yum
源。
sudo yum makecache fast
8.
安装
Docker-CE
软件
yum -y install docker-ce
9.
安装后查看
Docker
软件的版本。
docker -v
10.
查看
docker
概要信息。
docker info
11.
查看
docker
帮助⽂档
docker --help
2.3 Docker
守护进程相关命令
1.
启动
docker
服务
systemctl start docker
2.
查看
docker
服务运⾏状态。如果
docker
是在运⾏中,输⼊命令后会看到绿⾊的
"
active (running)
"
提示。
systemctl status docker
3.
重启
docker
服务。
systemctl restart docker
4.
停⽌
docker
服务。
systemctl stop docker
5.
设置
docker
开机⾃动启动。
systemctl enable docker
6.
禁⽤
Docker
开机⾃动启动。
systemctl disable docker
2.4 Docker
镜像加速器
1.
中科⼤镜像加速器
1.
通过
vim
命令编辑
daemon.json
⽂件(没有时新建该⽂件)。
vim /etc/docker/daemon.json
2.
在
daemon.json
⽂件中输⼊如下内容。
{"registry-mirrors" : [ "https://docker.mirrors.ustc.edu.cn" ]}
注意:⼀定要保证该⽂件符合
JSON
规范,否则
Docker
将不能启动。
2.
阿⾥云镜像加速器
1.
访问阿⾥云镜像获取地址:
https://promotion.aliyun.com/ntms/act/kubernetes.html
3.
进⼊控制台后,搜索【容器镜像服务】选项。
4.
在打开的容器镜像服务窗⼝中,选择【镜像加速器】选项,复制个⼈的加速器地址。
5.
通过
vim
命令编辑
daemon.json
⽂件(没有时新建该⽂件)。
vim /etc/docker/daemon.json
6.
在
daemon.json
⽂件中输⼊如下内容。
{"registry-mirrors" : [ "https://icnwj1s9.mirror.aliyuncs.com" ]}
4.
重新启动服务
sudo systemctl daemon-reloadsudo systemctl restart docker
5.
检查加速器是否⽣效
检查加速器是否⽣效配置加速器之后,如果拉取镜像仍然⼗分缓慢,请⼿动检查加速器配置是否⽣效,在命令⾏执
⾏
docker info
,如果从结果中看到了如下内容,说明配置成功
$ docker info...Registry Mirrors:https://docker.mirrors.ustc.edu.cn...
3 Docker
常⽤命令
搜索镜像
docker search tomcat
拉取镜像
docker pull java
注意:受⽹速的影响,上述镜像在下载过程中⽐较缓慢,可能会出现⼀次下载不成功的情况,则重新拉取, 并耐⼼等待。
查看镜像
1.
查看本地镜像列表。
docker images
2.
列出本地镜像中
REPOSITORY
为
ubuntu
的镜像列表。
docker images tomcat
删除镜像
1.
强制删除本地镜像
centos:7
。
# docker rmi -f centos:7
2.按镜像
ID
删除镜像。
docker rmi 90d5884b1ee0
容器相关命令
查看容器
列出容器。
docker ps
查看停⽌的容器。
docker ps -f status = exited
3.2.2
创建与启动容器
使⽤
nginx
镜像
ID
以后台模式启动⼀个容器,将容器的
80
端⼝映射到主机的
80
端⼝。
docker run -itd --name = mynginx -p 80 :80 fb5657adc892
3.2.3
启动停⽌重启容器
docker stop :停⽌⼀个运⾏中的容器。docker start :启动⼀个或多个已经被停⽌的容器。docker restart :重启容器(重启已经关闭的容器)。
停⽌运⾏中的容器
mynginx
。
docker stop mynginx
停⽌所有正在运⾏的容器。
docker stop $(docker ps -aq)
启动已被停⽌的容器
mynginx
。
docker start mynginx
重启容器
mynginx
。
docker restart mynginx
3.2.4
登录容器
docker exec -i -t mynginx /bin/bash