Docker基本命令


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 通过 saveload 导出导入镜像文件,命令格式如下:

# 导出镜像文件
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. 卷的删除

Dockervolume 卷通过 rm 参数执行删除,格式如下:

# 删除 volume 卷
docker volume rm <name>

五、网络管理

1. 网络创建

Docker 中启动服务时,--network 选项用于指定容器应连接到的网络,通过 docker network create 用于创建网络。

docker network create <network_name>

在自定义网络中,Docker 提供内置的 DNS 服务,使用同一个网络的容器可以通过容器名互相访问,而不需要使用 IP 地址。

如下述命令中创建了两个容器 service1service2 并设置共用 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 网络存在三种模式:bridgeoverlaymacvlan,在创建时通过 --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>      # 重命名

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录