Docker

安装/启动

官方安装教程open in new window

卸载旧版本

如果之前有安装过,没安装过可直接跳过这一步

旧版本的Docker 称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine

设置仓库

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,就可以从仓库安装和更新 Docker。

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

$ sudo yum install -y yum-utils \
 device-mapper-persistent-data \
 lvm2

使用以下命令来设置稳定的仓库。

$ sudo yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

安装

安装最新版本的 Docker Engine-Community 和 containerd

$ sudo yum install docker-ce docker-ce-cli containerd.io

检查是否安装成功

$ docker -v

配置

更多配置项请参考官方文档open in new window

修改docker配置文件

vi /etc/docker/daemon.json

默认是没有这个文件的,若有就不用新建了,安装以下配置修改即可

{
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "live-restore": true,
        "log-driver":"json-file",
        "log-opts": {"max-size":"10m", "max-file":"30"}
}
  • registry-mirrors: 镜像拉取地址,设置这个下载镜像可以稍微快点,可选
  • live-restore: 设置为true支持在Docker守护程序升级期间保持容器运行,此选项仅适用于独立容器,不适用于群集服务,可选
  • max-size:设置日志文件大小,10m意味着一个容器的单个日志大小上限是10M,必选,根据具体情况调整。不宜设置太大,个人觉得50M以下适宜,太大了影响后续运维日志查看。
  • max-file:设置日志文件数量,30代表意味着一个容器最多存储30个日志,必选,根据具体情况调整。如果系统盘容量充足,可以设置得大一些。

生产环境log-opts必须设置,否则随着程序的运行,日志不会自动切割,不手动清理的话迟早占满硬盘。

如果线上跑了很多程序,也不方便重启docker,则可以针对后续上线的容器增加如下配置项

docker run -itd --name container_name --log-driver json-file --log-opt max-size=10m --log-opt max-file=30 image:tag

启动docker

$ sudo systemctl start docker

常用指令

容器操作

# 启动一个容器 -i: 允许交互 -t: 指定终端 -d: 后台运行
$ dokcer run -itd --name image

# -P: 随机分配一个主机port 
# -p: 指定port(容器=>主机) 访问3000映射到容器3001
$ docker run -d -P image
$ docker run -d -p 3000:3001 image

# -e: 环境变量值 -v: 映射宿主主机文件路径到容器
$ docker run -d -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro

# 查看正在运行的容器
$ docker ps
 
# 查看所有容器
$ docker ps -a

# 根据容器ID或名称查看容器的元数据
$ docker inspect CONTAINER

# 进入某个容器
$ docker exec -it CONTAINER /bin/sh
 
# 根据容器ID或名称停止
$ docker stop  CONTAINER
 
# 重启容器
$ docker restart CONTAINER

# 停止所有容器
$ docker stop `docker ps -a -q`
 
# 根据容器ID或名称删除容器
$ docker rm  CONTAINER
 
# 删除所有容器
$ docker rm `docker ps -a -q`

# 根据容器ID或名称查看容器在宿主主机的PID
$ docker top CONTAINER

# 查看所有容器的PID
$ docker inspect -f '{{.State.Pid}} {{.Id}}' $(docker ps -a -q)

日志操作

# 根据容器ID或名称查看最后20行日志
$ docker logs  CONTAINER  --tail 20
 
# 用less查看日志(如果日志很大不建议使用less)
$ docker logs CONTAINER | less
 
# 用less查看并匹配日志
$ docker logs CONTAINER  | less | grep 匹配条件
 
# 根据容器ID或名称查看日志路径
$ docker inspect --format='{{.LogPath}}' CONTAINER

# 清空某个容器的日志(仅用于日志占满了磁盘需要紧急清理时使用)
cat /dev/null > *-json.log

镜像操作

# 搜索镜像
$ docker search image

# 拉取镜像
$ docker pull image:tag

# 构建镜像
$ docker build -t images:tag ./Dockerfile

# 给镜像添加标签
$ docker tag containerId image:tag

# 查看镜像
$ docker images
 
# 根据IMAGE ID删除镜像(删除前需要先停止容器)
$ docker rmi IMAGE ID
 
# 删除所有镜像
$ docker rmi `docker images -q`

# 保存镜像到文件(package.tar)
$ docker save images:tag > package.tar

# 保存镜像到文件并使用gzip压缩
$ docker save myimage:latest | gzip > myimage_latest.tar.gz

# 从文件加载镜像
$ docker load < myimage_latest.tar.gz

网络操作

用docker-compose启动的容器网络名会自动添加一个前缀,为当前启动文件目录名称

不同的容器之间进行通信需要依赖于网络, 启动容器时用配置项--network来指定连接的网络

# 查看网络
$ docker network ls

# 查看容器映射的端口
$  docker port CONTAINER

容器和宿主主机

# 拷贝宿主主机文件到容器
$ docker cp 宿主文件路径 [容器ID或者NAME]:容器路径
# 例
$ docker cp /usr/share/zoneinfo/Asia/Shanghai parking_web_admin:/etc/localtime

上次更新:
Contributors: zhouqh