Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,简单的理解就是“轻量级的虚拟机”。
本文主要介绍在 CentOS 7.x 下,使用腾讯云服务器,结合腾讯云镜像源,了解Docker的基础命令。
如果要安装新版本的 Docker ,可以先卸载掉旧版本(在保证不影响使用的情况下)。
# 列出系统中已安装的docker包
yum list installed | grep docker
# 卸载已安装的docker包(如上一步没有安装 Docker 则可跳过)
yum -y remove docker-ce-cli.x86_64
yum -y remove docker-ce.x86_64
yum -y remove containerd.io
# 安装 Docker 所需的依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 的 yum 源
yum-config-manager --add-repo https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo
# yum 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
# 查看 Docker 版本
docker version
# 执行以下命令启动 Docker
systemctl start docker
# 然后将 Docker 设置为开机启动
systemctl enable docker
# 查看 Docker 运行状态
service docker status
# 可能返回以下内容,看到 active (running) 表示正在运行中
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2023-12-22 10:00:56 CST; 11s ago
Docs: https://docs.docker.com
Docker 工作的基础即是镜像,可以认为一个镜像即是一个独立的由应用组成的虚拟机。docker 官方建立了 Docker Hub 来存贮镜像,但是由于网络原因, Docker Hub 的访问速度过慢,这里更换为腾讯云的镜像源地址。
# 创建 Docker 配置目录
mkdir -p /etc/docker
# 配置 Docker 镜像加速源
vim /etc/docker/daemon.json
# 输入以下内容后保存退出
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
# 重启守护进程并重启 Docker
systemctl daemon-reload && systemctl restart docker
docker run 命令用于从 Docker 镜像运行一个容器。
# 命令格式
docker run --name=容器名称 镜像名称
# 命令示例
docker run --name=hello hello-world
# 命令说明
--name=hello: 这个选项用于给容器指定一个名字,这里的名字是“hello”。
hello-world: 这是要运行的Docker镜像的名字。Docker会从本地或者Docker Hub上拉取这个镜像(如果本地没有的话),并基于这个镜像创建一个新的容器运行。
# 可能返回以下内容,表示运行成功
Hello from Docker!
This message shows that your installation appears to be working correctly.
hello-world通常是一个非常简单的 Docker 镜像,用于演示 Docker 如何工作。它会输出一条欢迎消息,然后停止运行。
命令会直接拉取 hello-world 镜像,然后运行一个 hello 容器,当运行这个命令时,Docker会做以下几件事情:
1、检查本地是否有 hello-world 镜像,如果没有,它会尝试从 Docker Hub (本示例为腾讯软件源)下载。
2、基于 hello-world 镜像创建一个新的容器。
3、给这个新容器命名为“hello”。
4、运行这个容器。
hello-world 容器会执行其预定义的命令,容器执行完毕后会自动停止,Docker 常见示例,用于展示 Docker 的基本工作原理。
docker ps 命令用于查看容器的进程
# 命令示例
docker ps -a
# 可能返回以下内容,hello 容器已在运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6272bfc3fc36 hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago hello
除了上述方式外,也可以通过 docker pull 命令拉取(下载)镜像,然后再手动运行。
# 命令格式
docker pull name[:tag]
name:镜像名称
tag:特定标签,如不指定则表示为最新版本
# 命令示例,拉取特定标签为 alpine 的 nginx 版本
docker pull nginx:alpine
# 命令示例,拉取最新的 nginx 版本
docker pull nginx
docker images
# 可能返回以下内容,包括 nginx 、hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx alpine 529b5644c430 8 weeks ago 42.6MB
hello-world latest d2c94e258dcb 7 months ago 13.3kB
docker create 命令用于创建容器,镜像拉取成功后,根据镜像创建容器。
# 命令格式
docker create 参数 镜像名称
#参数说明
–name :容器名字
-p:指定端口映射,主机(宿主)端口:容器端口,如80:80 表示该容器将 80 端口映射到主机 80 端口
#命令示例
docker create --name=nginx_web -p 80:80 nginx
# 查看容器进程
docker ps -a
# 可能返回以下内容
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bab8bb6d89ae nginx "/docker-entrypoint.…" 50 seconds ago Created nginx_web
6272bfc3fc36 hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago hello
与 docker run 不同的是,docker create 创建出来的容器不会直接启动运行。
docker start 命令用于启动容器
# 命令格式
docker start 容器名称
# 命令示例
docker start nginx_web
因为本示例启动的是 nginx ,此时可以通过访问 http://ip 看到 nginx 的环境界面
停止正在运行的容器有两种方法,docker stop 命令或者 docker kill 命令,区别在于,docker stop
会给时间让容器保存最后的运行状态,而 docker kill
则会直接关闭容器。
# 命令格式
docker stop 容器名称
# 命令示例
docker stop nginx_web
# 命令格式
docker kill 容器名称
# 命令示例
docker kill nginx_web
docker rm 命令可以删除指定的容器
# 命令格式
docker rm [参数] 容器名称
# 参数说明
-f:强制停止并删除运行状态的容器
# 命令示例,删除终止状态的容器
docker rm nginx_web
# 命令示例,强制删除运行状态的容器
docker rm -f nginx_web
# 查看容器进程确认结果
docker ps -a
docker rmi 命令用于删除指定的镜像
# 命令格式
docker rmi 镜像名称
# 命令示例
docker rmi nginx
# 查看镜像确认结果
docker images
通过 docker rmi 跟镜像 ID 来删除指定的镜像。
# 获取所有镜像 ID
docker images -q
# 通过镜像 ID 一次性删除所有镜像
docker rmi `docker images -q`
# 查看镜像确认结果
docker images
以上内容仅是 docker 日常使用的基础命令及参数,更多内容可查阅相关资料。