Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(来自百度百科)。Docker是这两年比较热的东西,有人用来解决集群运维中问题,有人用来它做微服务的架构,总之,是个好东西。
今天我写一点自己操作Docker的操作日记,一是给自己工作成果留个记录,二是也许也能惠及到别人。 我的大部分参考主要来自https://docker.github.io/上的文档。
第一篇我来讲讲怎么安装Docker和运行一个Helloworld的docker,以及常用的一些命令。
准备2台机器,一台取名为master, 另外一台取名为slave, 这两台机器都安装了CentOS 7 64bit。为了减少操作输入的麻烦,都是用root权限来操作的,如果正常的非root用户操作,就在命令之前加sudo
1. 在安装之前,要确保删除机器上原有docker的安装版本,如果你重装docker,也可以安装下列步骤。如果你重来没有安装过docker的话,这步可以跳过。
a. 停止docker服务(如果有的话)
$ sudo systemctl stop docker
b. 删除docker相关的安装包
$ sudo yum -y remove docker docker-engine docker-common container-selinux docker-engine-selinux
如果有相关包名match的话,会被删除。
c. 你可以选择迁移旧的docker数据的目录(var/lib/docker),也可以保留下来(如果在后面的安装中没有冲突发生的话)
$ sudo mv /var/lib/docker ./reserve_docker_data
2. 在清理完旧docker安装包之后,我们可以开始来安装docker来。
a. 如果你是一台新的机器的话,你需要安装docker的仓库(repository),安装之后,以后你对docker的安装,更新或者下载,都是从这个仓库里来。
i. 安装yum-utils包,因为这个包会提供一个 yum-config-manager工具
$ sudo yum install -y yum-utils
ii. 用yum-config-manager来安装docker 仓库
$ sudo yum-config-manager \
--add-repo \
https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo
如果成功,返回log中会有 repo saved to /etc/yum.repos.d/docker.repo。
在docker.github的文档中还提到怎么测试这个仓库安装是否成功。 但是这个是可选项,如果没有特别返回值,我认为没有必要去做。
b. 安装docker
i. 首先更新yun的下载包的索
$ sudo yum makecache fast
ii. 然后直接安装最新版的docker包 (写文档时候,最新是docker1.13.1,如果你需要用到swarm模式的话,需要安装的是docker-engine,如果是安装docker,就不支持swarm模式)。
$ sudo yum -y install docker-engine
安装完成之后,log会包含安装的版本:
Installed:
docker-engine.x86_64 0:1.13.1-1.el7.centos Complete!
在实际的操作中,我们可能需要在安装的时候就指定版本,而不是每次都下载最新版本,你可以用sudo yum list docker-enigne 来有哪些合适的docker-engine的安装包版本然后在安装过程中直接指定版本。 比如:
$ sudo yum list docker-engine --showduplicates | sort --sort=version -r
返回结果:
docker-engine.x86_64 1.13.1-1.el7.centos docker-main
docker-engine.x86_64 1.13.0-1.el7.centos docker-main
docker-engine.x86_64 1.12.6-1.el7.centos docker-main
docker-engine.x86_64 1.12.5-1.el7.centos docker-main
然后运行 $ sudo yum install -y docker-engine-1.13.1-1.el7.centos 安装就可以了。
iii. 启动docker service
先设置docker service开机启动
$ sudo systemctl enable docker
然后启动docker service
$ sudo systemctl start docker
你可以跑一下docker命令,现在docker已经ready了
$ sudo docker --help
你能看到docker支持的各种命令,后面我们慢慢来讲怎么用它们。
3. 下载一个helloworld的docker image然后启动第一个docker 实例
先查看一下当前本地的docker image
$ sudo docker images
返回结果应该是空的:
REPOSITORY TAG IMAGE ID CREATED SIZE
下载一个hello-world的image,默认是从公共的io.docker仓库. 下载过程可能连接超时,可以多试几次。
$ sudo docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
查看一下本地image,应该已经有hello-world这个image
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 48b5124b2768 5 weeks ago 1.84 kB
运行hello-world的docker image
$ sudo docker run hello-world
Hello from Docker! //第一个docker实例启动了
4. 其他关于安装更新的说明:
a. 需要更新docker的版本的话,如果安装上述方式安装的,只要重新yum install一个新的版本就可以了,不用删除重装新版本。
b. 如果你想下载RPM包到本地,然后去 https://yum.dockerproject.org/repo/main/centos/ 下载RPM,然后yum install -y /path/包名.rpm。 这种安装方式,需要更新的时候,用yum upgrade /path/新包名.rpm (而不用yum install).
5. 关于docker 常用命令的说明
- docker run [OPTIONS] DOCKER_IMAGE [FIRST CMD] //启动docker image,
常用的进入一个容器的控制台
sudo docker run -it -v HOST_FOLDER:CONTAILER_FOLDER -p HOST_PORT:CONTAINER_PORT DOCKER_IMAGE /bin/bash
-it: 允许控制台输出 -v是主机目录映射到容器内目录 -p 是容器侦听端口映射到主机端口
- docker images //查看本地的image 列表
- docker pull Repository/DOCKER_IMAGE //从仓库里下载一个image, Repository没写的话,默认是io.docker
sudo docker pull tomcat //从公共io.docker仓库来下载一个tomcat image
- docker push Repository/DOCKER_IMAGE
sudo docker push myRepository/myapp:1.0 上传一个myapp:1.0到私有仓库myRepository
- docker ps // 查看当前运行的docker 实例
sudo docker ps -a //查看所有的运行过的实例,包括已经关闭的实例
sudo docker ps --last n //查看最近运行的n个实例,n 可以1,2,3..整数
- docker commit CONTAINER_ID DOCKER_IMAGE //把某个运行的实例,保存为一个本地image,以便下次用docker run运行同样的实例。 CONTAINER_ID通常去前四位就可以了.
$ sudo docker commit 2970 myhellworld
最后在另外一台机器slaver也做同样的操作,确保两台机器上docker都安装完成。