一、名词说明

Dockerfile 镜像构建文件
Docker Images 镜像;生成容器
Docker Containers 容器;微型系统
Docker Volumes 卷;存放容器运行数据
Docker Networks docker 自有网络管理
Docker Context  
Docker Compose 编排服务;多个或一组相关联的 docker 服务管理
Docker Machine docker 管理工具客户端
Docker Swarm docker 服务集群管理工具

二、Linux 环境部署

红帽系 RHEL 7+ 下的 Linux 环境部署。

2.1 卸载原有安装包

dnf remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    podman \
    runc

2.2 系统新增 Docker Repo

dnf install -y yum-utils
# 系统追加 Docker 镜像源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 变更为国内<南京大学>镜像源
# 参考:http://mirrors.nju.edu.cn/help/docker-ce
sed -i 's+download.docker.com+mirror.nju.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

2.3 安装 Docker

# 安装引擎
dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 要安装特定版本的 Docker 引擎,在存储库中列出可用版本,选择并安装:
# 列出存储库中可用的版本并对其进行排序,按版本号排序
dnf list docker-ce --showduplicates | sort -r
# 安装特定版本
dnf install docker-ce-{version} docker-ce-cli-{version} containerd.io docker-compose-plugin
# 自定义docker网卡地址(避免于宿主机网段冲突,导致无法上网)
echo '{"bip":"172.17.0.1/16"}' > /etc/docker/daemon.json
# 启动 docker 服务
systemctl start docker
# 开机自启动
systemctl enable docker
systemctl enable containerd

2.4 配置国内Hub

参考<南京大学>镜像站:http://mirrors.nju.edu.cn/help/docker-hub

# 这里配置为<南京大学>镜像站
# 注意:已存在得 daemon.json 不可覆盖
echo '{"registry-mirrors": ["https://docker.nju.edu.cn/"]}' > /etc/docker/daemon.json
# 重启服务生效
systemctl restart docker
# 验证Hub变更效果(Registry Mirrors 的值,倒数第二行)
docker info

2.5 卸载 Docker

# 卸载 Docker-Engine、CLI、Containerd、Docker-Compose 软件包
dnf remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 主机上的映像、容器、卷或自定义配置文件 不会自动删除;删除所有映像、容器、卷
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

三、常用命令

Docker 命令大全参考:https://www.runoob.com/docker/docker-command-manual.html

3.1 基础命令

# 显示已有的对象列表
docker image/container/volume/network ls
# 删除对象
docker image/container/volume/network rm
# 清理无用的未启动的对象
docker image/container/volume/network prune
# 卷管理:创建、详情、列表、清理、删除
docker volume create|inspect|ls|prune|rm
# 网络管理:连接、创建、断开、详情、列表、清理、删除
docker network connect|create|disconnect|inspect|ls|prune|rm
# docker system:docker本身
# df:磁盘使用情况
# info:docker 服务详细信息
# prune:清理 停掉的容器|无用的网络|无效的镜像|无效的缓存
# --volumes:清理 无用的卷(容器运行的数据)
docker system df/info/prune --volumes

3.2 Image

# 镜像 删除、查询、下载、推送、运行容器
docker rmi/search/pull/push/run {image}
#
# 创建镜像
# -t:tag;镜像名称及标签
# -f:file;指定Dockerfile文件所在路径及文件名称;默认值=./Dockerfile
# source-path:生成镜像的打包目录,默认值=.(当前目录);Dockerfile中的COPY以此目录为基准
docker build -t [{HubID}]/{image-name}:{tag} [-f {dockerfile-path}] [{source-path}]
# example a:docker build -t custom-name:1.0 -f /opt/dockerfile.debug .
# example b:docker build -t custom-name
#
# 拉取镜像
docker pull [{HubID}]/{image-name}:{tag}
# 推送镜像
docker push [{HubID}]/{image-name}:{tag}
# 打包镜像
docker save {镜像名} --output {path/filename}.tar
docker save {镜像名} > {path/filename}.tar
docker save {镜像名} | gzip > {path/filename}.tar.gz
# 解压镜像到存储库
docker load --input {path/filename}.tar
docker load < {path/filename}.tar
docker load < {path/filename}.tar.gz
# 查看全部镜像列表
docker images -a
# 查看过滤后的镜像列表(无效的)
docker images --filter dangling=true
# 删除镜像 remove images
docker rmi {hub_id}/{repo-name}:{tag}

3.3 Container

# 用镜像生成一个容器运行
# -dit:后台运行容器,附带可交互式的终端(供随时进入容器内)
# --name:容器名称
# --restart:容器自动运行,除非手动停止
# -p:主机与容器的端口绑定 {local}:{container}
# -e:环境变量
#    1、系统环境变量:容器本身是一个简化过的Linux微系统,如系统默认字符集 LANG=C.utf8
#    2、应用环境变量:容器内应用自定义的环境变量,如:MYSQL_ROOT_PASSWORD 初始密码
# -v:卷绑定;应用主机文件(同步);{容器文件}:{主机文件}
docker run -dit --name {容器名称} --restart unless-stopped -p {lPort}:{cPort} \
        -e LANG=C.utf8 -v /etc/localtime:/etc/localtime {镜像名}
#/ MySQL Case:
# -c:cpu可核心数、-m 内存可使用的容量(BKMG)、--name:容器名称,--restart:自启动
# -p:端口绑定,-e:环境变量(默认字符集,初始密码,创建库),-v:与主机设定相同时区
docker run -dit -c 4 -m 6G --name mysql.t.index --restart unless-stopped \
    -p 3306:3306 \
    -e LANG=C.utf8 \
    -e MYSQL_ROOT_PASSWORD=sa. \
    -e MYSQL_DATABASE=testdb \
    -v /etc/localtime:/etc/localtime \
    mysql
# 进入容器
# -it:用终端进入
# -e:配置环境变量
docker exec -it -e LANG=C.utf8 {容器名} bash
# 容器其它操作项
# commit:当前容器现状生成 new image
# cp:拷贝; 容器到主机 {容器Id}:{Path} {LocalPath},主机到容器 {LocalPath} {容器Id}:{Path}
# start|restart|rename|pause|unpause|stop|rm:启动,重启,重命名,暂停,恢复,停止,删除
# inspect|stats|top|port|kill|logs:描述,时时资源使用情况,进程状况,用到的端口,杀死,日志
docker commit|cp|start|restart|rename|pause|unpause|stop|rm|stats|top|port|kill|logs {容器}
# 修改容器属性
docker update --restart {新值}
# 当前容器生成新镜像
docker commit {容器} {新镜像名称}
# 拷贝容器内文件 到主机目录
docker cp {容器}:{path} {local_path}
# 拷贝主机文件 到容器内目录
docker cp {local_path} {container}:{path}
# 时时日志 -f
docker logs --follow {container}
# 最新日志 -n
docker logs --tail={行数} {container}
# 指定日期时间之前
docker logs --until={时间} {container}
# 指定日期时间之后
docker logs --since={时间} {container}
# 容器内文件变更情况
docker diff {container}
# 硬件资源时时使用情况
# --no-stream:仅打印出当前一次
docker stats [--no-stream] {container}

3.4 Repository

# 登录/登出 Registry
docker login/logout
# 搜索仓库中的镜像
docker search [username/]{image}
# 镜像下载到本地
docker pull {image}[:{tag}]
# 镜像推送到仓库
docker push {username}/{image}[:{tag}]
# 本地镜像标记成指定仓库的镜像
docker tag {source_image}[:{tag}] [{hub_id}/][{username}/]{target_image}[:{tag}]

四、服务管理

4.1 Compose

# 编排服务管理

4.2 Machine

# 客户端工具

4.3 Swarm

# 集群管理工具