安装
1、Docker 要求 CentOS 系统的内核版本不低于 3.10,通过 uname -r 命令查看你当前的内核版本
uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。(温馨提示:新环境或测试环境可随意操作,生产环境酌情慎重更新)
sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源(选择其中一个)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
7、安装docker
sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
8、启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
10、使用加速镜像
编辑/etc/docker/daemon.json文件添加镜像信息:
vim /etc/docker/daemon.json
添加内容如下:
#使用网易镜像
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
基本操作
镜像
1、查找 Docker Hub 上的 python 镜像
docker search ImageName
例:
docker search python
2、拉取镜像
这里我们拉取官方的镜像,标签为3.6:
docker pull NAME[:TAG]
#例如
docker pull python:3.6
3、查看本地镜像列表
等待我们的python镜像文件下载好后执行下面命令可以看到我们下载好的镜像文件
docker images
4、删除某个镜像
docker rmi id/name
容器
将镜像跑起来就成为了容器(暂时可以这样理解)。其中,每条命令的参数(如 -it)可以自行百度,这里只对常用操作简要说明
1、创建容器
docker create -it centos #创建一个基于centos镜像的容器
2、查看当前正在运行的容器
docker ps
查看所有容器的状态
docker ps -a
2、启动/重启/关闭/强制停止 容器
docker start/restart/stop/kill CONTAINERID
3、新建并启动
docker run -it --name william python:3.6 /bin/bash
# python:3.6为镜像名和标签
# 命名为william且运行,然后以伪终端交互式方式进入容器,运行bash
4、进入容器(一般使用第二个)
docker attach CONTAINERID #通过容器名来进入容器 (使用exit退出后容器也跟着停止运行)
docker exec -ti CONTAINERID /bin/bash #启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)
5、删除容器
docker rm container_id
6、容器迁移,先导出容器,在新的环境内导入成镜像
我们使用容器的一个重要原因,就是运行环境的迁移,直接将容器导入导出就可以了。容器迁移,先导出容器,在导入成镜像即可。
# A环境 导出容器
sudo docker export container_id | gzip > image_name.tar.gz
# B环境 导入成镜像
zcat image_name.tar.gz | sudo docker import - image_name
网络
有些对外服务的容器,比如tomcat,mysql等,需要开放端口给外部访问。
端口开放通过启动参数 -p 来指定。-p 宿主机端口:容器端口。
一般来说,为了方便管理,会设置宿主机端口和容器端口保持一致,比如web端口:-p 80:80
docker run -it -P --name william_tomcat tomcat /bin/bash
# 使用 -P (大写) 参数时,会将容器内端口映射到主机的随机端口上
docker run -it -p 80:8080 --name william_tomcat tomcat /bin/bash
# 使用 -p (小写) 参数时,冒号(:)左边为主机端口,右边为容器端口 即将容器的8080端口映射到主机的80端口上
此时,通过ip:80就可以访问到容器里的tomcat了
数据卷
一般情况下,容器只是运行环境,不应该承担数据存储的角色,如果有数据存储的需求或者需要读取系统文件,就需要将系统的某个文件夹挂在到容器中,这样容器既能读取系统文件,也能将运行时生成的文件写到系统中保存起来,最典型的就是MySQL之类的数据库容器,如果不将数据保存起来,随着容器的消失,数据也跟着消失了。
数据卷通过启动参数 -v 来指定。
-v后面的映射关系是"宿主机文件/目录:容器里对应的文件/目录",其中,宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。
因此,为了方便管理,最好是宿主机路径与容器路径保持一致。
docker run -it -v /home/william/data:/home/william/data --name william_python python:3.6 /bin/bash
# 将/home/william/data映射到容器 /home/william/data 上
docker run -it -v /home/william/data:/home/william/data:ro --name william_python python:3.6 /bin/bash
# 加上 :ro 参数 使容器/home/william/data 目录为只读
docker run -it -volumes-from william_python --name william_python2 python:3.6 /bin/bash
# william_python2容器或william_python容器任何一方对/home/william/data 目录的修改都会互相看到