Docker
安装/启动
卸载旧版本
如果之前有安装过,没安装过可直接跳过这一步
旧版本的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
配置
更多配置项请参考官方文档
修改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