Docker 是近些年来被广泛使用的一项技术,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。
对于编程工作者而言,当临时需要用到某个环境即可快速通过容器构建服务,简单且又高效。下面将简单介绍 Docker
的基本操作。
一、服务部署
1. 服务安装
通过 yum
工具实现快速安装,默认安装路径:/var/lib/docker
。
# 下载依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
# 设置下载镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装服务
yum -y install docker-ce
# 启动服务
systemctl start docker
2. 镜像配置
默认 Docker
镜像从其官网进行拉取,国内网络在拉取镜像时可能存在延迟。
因此,通常会为 Docker
服务设置镜像地址,修改 daemon.json
配置文件执行指定。
# 编辑配置文件
vi /etc/docker/daemon.json
# 设置镜像为网易源
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
# 修改文件后需重启服务
systemctl restart docker
3. 基本操作
Docker
服务基本操作命令格式如下:
systemctl <params> docker
其中 params
可选值及其对应作用参考下表:
方法 | 作用 |
---|---|
status | 查看 Docker 服务运行状态。 |
start | 启动 Docker 服务。 |
stop | 停止 Docker 服务。 |
restart | 重启 Docker 服务。 |
enable | 设置 Docker 服务开机自启 |
disable | 关闭 Docker 服务开机自启 |
二、服务管理
1. 服务更新
在执行 curl -fsSL https://get.docker.com/ | sh
可能会提示超时,多试几次就可以了。
rpm -qa|grep docker # 查看 docker 相关源文件
yum -y remove <xxx> # 删除上一步查询的文件包
curl -fsSL https://get.docker.com/ | sh # 安装最新版本
2. 服务卸载
Docker
服务卸载步骤如下,先删除已经安装的服务包最后删除 /var/lib/docker
目录的数据文件。
yum list installed|grep docker # 查看安装的 docker 文件包
rpm -qa|grep docker # 查看 docker 相关源文件
yum -y remove <xxx> # 删除上一步查询的文件包
rpm -qa|grep docker # 检查是否已删除
rm -rf /var/lib/docker # 删除 docker 镜像文件
三、镜像管理
1. 镜像拉取
在拉取镜像前可通过 docker search
先搜索已存在的镜像及其版本信息。
当搜索完成后即可通过 pull
命令拉取镜像,需要注意若未指定版本则默认拉取 latest
即最新的版本。
docker search <name> # 搜索镜像
docker pull <name>:<version> # 拉取镜像
2. 镜像查看
通过 images
参数查看已经 pull
下来的容器镜像,并可通过 rmi
参数删除。
docker images # 查看所有镜像
docker rmi <images_id> # 删除对应镜像
3. 导入导出
当通过 pull
命令拉取镜像到本地后可将其导出为 tar
文件,该文件可导入至任意拥有 docker
服务的机器上。
Docker
通过 save
和 load
导出导入镜像文件,命令格式如下:
# 导出镜像文件
docker save <save_path>.tar <image_id>
# 导入镜像文件
docker load -i <save_path>.tar
四、卷列管理
1. 卷的创建
在 Docker
中提供了数据持久化的能力,可以将容器内文件或目录映射至外部文件系统,这样即便在容器服务宕机的情况下仍然访问数据文件。
通过 volume create
参数可用于创建卷,在 /var/lib/docker/volumes
下会生成一个同名目录。
# 创建 volume 卷
docker volume create <volume_name>
# 查看 volume 卷信息
docker volume inspect <volume_name>
当完成卷的创建后,在启动容器时即可通过 -v
将容器内文件映射至外部卷,如下述中即将容器内 /data
目录映射到外部创建的卷中。
docker run \
-v <volume_name>:/data
test_image
2. 卷的删除
Docker
的 volume
卷通过 rm
参数执行删除,格式如下:
# 删除 volume 卷
docker volume rm <name>
五、网络管理
1. 网络创建
在 Docker
中启动服务时,--network
选项用于指定容器应连接到的网络,通过 docker network create
用于创建网络。
docker network create <network_name>
在自定义网络中,Docker
提供内置的 DNS
服务,使用同一个网络的容器可以通过容器名互相访问,而不需要使用 IP
地址。
如下述命令中创建了两个容器 service1
与 service2
并设置共用 test_network
网络,当 service1
需要访问 service2
的服务时,即可通过 service2
作为 hostname
代替 IP
访问。
docker network create test_network
docker run -d --network test_network --name service1 test_image
docker run -d --network test_network --name service2 test_image
如果不使用 --network
选项,Docker
会将容器连接到默认的 bridge
网络,其未 Docker
引擎默认创建的一个网络,此时多个容器服务之间则只能通过 IP
进行访问。
2. 容器网络
Docker
网络存在三种模式:bridge
,overlay
与 macvlan
,在创建时通过 --driver
指定,缺省时默认为 bridge
桥接模式。
# mode: bridge, overlay, macvlan
docker network create --driver <mode> <network_name>
(1) Bridge
Bridge
网络是 Docker
默认创建的网络类型,主要用于单机容器间的通信。
此模式下默认情况下没有内置 DNS
服务发现,支持通过 -p
进行端口映射,可以将容器的端口映射到主机端口,适用于在不需要跨主机通信的单个 Docker
主机上运行的简单应用。
(2) Overlay
Overlay
网络用于跨多个 Docker
主机(通常是 Swarm
集群)连接容器,实现分布式网络。
此模式支持跨主机的容器通信,通过内部的 VXLAN
技术实现。内置 DNS
服务发现,容器可以通过名称相互解析,适用于需要跨多个主机的分布式应用。
(3) Macvlan
Macvlan
网络将容器直接连接到宿主机网络,并分配宿主机网络的 MAC
地址,使每个容器看起来像网络上的一个物理设备。
此模式容器具有独立的 MAC
地址和 IP
地址,可以直接访问宿主机的网络,提供高性能网络通信,因为数据包不需要通过主机的网络堆栈,适用于需要与物理网络直接通信的高性能应用。
六、启动参数
1. 系统参数
在启动 Docker
容器时除常见的 -d
设置后台运行之外,还存在下述常见参数:
# 自启服务
--restart=always
# 赋予权限
--privileged=true
# 配置机器类型
--platform linux/amd64
除了在执行 docker run
时指定上述参数,当容器创建启动之后,同理也可使用 docker update
命令执行修改,其对应的格式如下:
# 开启容器自启,设置为 no 则表示关闭自启
docker update <container_id> --restart=always
2. 端口映射
通过 -p
参数实现容器端口与外部服务端口映射通讯。
如下行命令中即将容器 8080
端口映射到外部的 8081
,因此访问对应服务时应设置端口为 4306
。
docker run \
-p 8081:8080 \
test_image
3. 文件映射
通过 -v
参数实现容器内外的文件映射,当需要修改配置文件时只需修改映射出来的文件即可。
如下即将容器 /etc/conf
目录映射到外部的 /data/test/conf
目录下。
docker run \
-v /data/test/conf:/etc/conf \
test_image
4. 环境变量
通过 -e
参数实现容器服务的变量配置,如为服务设置内存占用等信息。
如在启动 Elasticsearch
服务是通常会为其设置最大的内存使用量,命令如下:
docker run \
-e ES_JAVA_OPTS="-Xms512m -Xmx2048m" \
elasticsearch:7.6.2
七、容器管理
1. 容器查看
通过 ps
命令参数显示当前创建的容器。
docker ps # 查看运行中容器
docker ps -a # 查看所有容器
2. 容器删除
通过 rm
命令删除容器,格式如下:
docker rm <container_id> # 删除对应容器
docker rm -f <container_id> # 删除运行中容器
docker rm $(docker ps -a -q) # 删除所有容器(慎用)
3. 文件拷贝
通过 docker cp
命令可实现容器与本机间的文件拷贝,格式如下:
# 复制容器文件至本机环境
docker cp <container_id>:/<inside_path> <outside_path>
# 复制本机文件至容器环境
docker cp <outside_path> <container_id>:/<inside_path>
4. 常用命令
其余容器常见操作命令如下:
docker logs <container_id> # 查看运行日志
docker exec -it <name> bash # 进入容器
docker rename <oldname> <newname> # 重命名