Docker 入门

Docker 是一个开源的应用容器引擎,可以让开发者打包应用及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。容器使用沙箱机制,每个容器内运行着一个应用,不同的容器相互隔离,容器之间可以通过网络互相通信。

不同于传统虚拟化方式,传统虚拟机技术是将计算机物理资源进行抽象虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

安装 Docker 和 Docker Compose

☕️ 使用脚本自动安装:

# 下载并运行阿里云的 docker 安装脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 查看 docker 版本
docker -v

# 设置 docker 开机自启动
systemctl enable docker

# 启动 docker
systemctl start docker

# 测试 docker 是否安装正确
docker run hello-world

# 查看 docker 容器,里面会有一个 Exited 状态的 hello-world 容器
docker ps -a

⭐️ 配置 docker 镜像加速器

# 阿里云镜像加速器地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["你的镜像加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

✏️ 将普通用户加入 docker 组

默认情况下,只有 root 用户和 docker 组的用户才能访问 Docker,所以如果想让普通用户执行 docker 命令,通过以下方式设置:

# 建立 docker 组
sudo groupadd docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 需要重新登录系统才能生效

📚 安装Docker-Compose

Docker-Compose是用于定义和运行一组相关联容器的管理工具,可通过编写 YAML 文件来配置所有服务。

# 下载并运行 docker-compose 安装脚本
# docker 和 docker-compose 版本对应关系查看 https://docs.docker.com/compose/compose-file/compose-versioning/
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 将可执行权限应用于二进制文件
chmod +x /usr/local/bin/docker-compose

# 查看 docker-compose 版本
docker-compose -v

常用镜像命令

docker images(查看镜像)

☕️ 命令:docker images [OPTIONS] [REPOSITORY[:TAG]]

⭐️ 常用可选项:

名称 描述
-a 列出所有镜像(默认隐藏中间镜像)
-q 只显示镜像的 ID

✏️ 例子:

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    7614ae9453d1   4 months ago   113MB
ubuntu       18.04     5a214d77f5d7   6 months ago   63.1MB
redis        3.2       87856cc39862   3 years ago    76MB
  • REPOSITORY:镜像的仓库源(名字)
  • TAG:镜像的标签(版本)
  • IMAGE ID:镜像的 id
  • CREATED:镜像的创建时间
  • SIZE:镜像的大小

镜像的标识有两种方式,一种是镜像 ID,另一种是使用REPOSITORYTAG组合后的镜像名,例如redis:3.2


docker pull(下载镜像)

☕️ 命令:docker pull [OPTIONS] NAME[:TAG|@DIGEST],如果不写tag(版本),默认就是latest

⭐️ 例子:

# 拉取最新版本,下面的命令相当于: docker pull mysql:latest
docker pull mysql

# 拉取指定版本,需要确定在仓库中存在该版本
docker pull mysql:5.7

docker rmi(删除镜像)

☕️ 命令:docker rmi [OPTIONS] IMAGE [IMAGE...],可以通过镜像的 id/name 删除一个或多个镜像

⭐️ 常用可选项:

名称 描述
-f 强制删除镜像

✏️ 例子:

# 删除指定镜像
docker rmi -f e73346bdf465

# 删除所有的镜像
docker rmi -f $(docker images -aq)

常用容器命令

docker run(新建容器并启动)

☕️ 命令:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

⭐️ 常用可选项:

名称 描述
--name 为容器指定名称,该名称是唯一的,使用方式为:--name="容器名"
-d 后台运行容器,并返回容器 ID
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i同时使用
-P 随机端口映射,容器内部端口随机映射到主机的端口
-p 指定端口映射,使用方式为:-p 主机端口:容器端口
-e 设置环境变量,使用方式为-e 变量名=value
-m 设置容器使用内存最大值
--rm 设置退出时自动删除容器
-v 绑定挂载目录,使用方式为:-v 主机目录:容器目录或者-v 容器目录
--restart=always 设置容器自启动,docker 服务重启后容器也跟着重启

✏️ 以交互方式运行容器:

# 使用交互方式运行容器,可以进入容器内部查看
[root@localhost ~]# docker run -it ubuntu:18.04 /bin/bash
root@8003fd3b5787:/# exit
exit
[root@localhost ~]# 

📚 设置容器自启动:

# 设置为每次 docker 服务重启后,容器也会自动重启
docker run --restart=always 镜像id/name

# 如果容器已经启动,可以使用下面命令设置重启方式
docker update --restart=always 容器id

✌ 以后台运行方式启动容器:

# 当以后台运行的方式(-d)启动一个容器,必须要有一个前台进行,否则容器的状态为 Exited
[root@localhost ~]# docker run --name="ubuntu" -d ubuntu:18.04
c4f66aa9667a02a438d0c7be66812b43795cc5a5bd6e851032870a1acf843782
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS                      PORTS     NAMES
c4f66aa9667a   ubuntu:18.04   "bash"    13 seconds ago   Exited (0) 13 seconds ago             ubuntu

# 一个解决方式是添加 -it 启动一个前台进程
docker run -dit ubuntu:18.04 /bin/bash

docker ps(列出容器)

☕️ 命令:docker ps [OPTIONS],不加任何参数默认显示为正在运行的容器

⭐️ 常用可选项:

名称 描述
-a 显示所有容器,包括未运行的
-l 显示最近创建的容器
-n 列出最近创建的 n 个容器
-q 只显示容器 ID

✏️ 例子:

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS     NAMES
bfa4c754b24e   ubuntu:18.04   "/bin/bash"   2 seconds ago    Up 1 second               focused_buck
  • CONTAINER ID:容器id
  • IMAGE:镜像
  • COMMAND:引用命令
  • CREATED:创建容器的时间
  • STATUS:容器状态
  • PORTS:暴露的端口
  • NAMES:容器名称

docker rm(删除容器)

☕️ 命令:docker rm [OPTIONS] CONTAINER [CONTAINER...],命令中的CONTAINER为容器的 id/name

⭐️ 常用可选项:

名称 描述
-f 强制删除正在运行的容器
-v 删除与容器关联的卷

✏️ 例子:

# 删除指定容器
docker rm -f e73346bdf465

# 删除所有的容器
docker rm -f $(docker ps -aq)

docker start/restart(启动和重启容器)

# 启动容器
docker start 容器id/name

# 重启容器
docker restart 容器id/name	

docker stop/kill(停止和杀死容器)

# 停止当前运行的容器
docker stop 容器id/name

# 强制停止运行的容器
docker kill 容器id/name		

docker exec(在运行的容器中执行命令)

☕️ 命令:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

⭐️ 常用可选项:

名称 默认
-d 分离模式,在后台运行
-i 即使没有附加也保持 STDIN 打开
-t 分配一个伪终端

✏️ 例子:

# 在指定容器中开启一个交互模式的终端
docker exec -it 容器id/name /bin/bash

docker logs(日志信息)

☕️ 命令:docker logs [OPTIONS] CONTAINER

⭐️ 常用可选项:

名称 描述
-f 跟踪日志输出
-t 显示时间戳
--tail 仅列出最新 N 条容器日志

✏️ 例子

# 显示全部日志
docker logs -ft 容器id/name

# 显示最新 10 条日志
docker logs -ft --tail 10 容器id/name

docker inspect(返回容器详细信息)

☕️ 命令:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

⭐️ 常用可选项:

名称 描述
-f 指定返回值的模板文件
-s 显示总的文件大小
--type 为指定类型返回JSON

✏️ 例子

docker inspect 容器id/name

Docker 实例

安装 MySQL

# 拉取 MySQL 镜像
docker pull mysql:5.7
# 创建并运行 MySQL 容器
docker run -p 3306:3306 --name=mysql -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it -d mysql:5.7

-p: 映射主机到容器的端口
--name: 设置容器名
-v: 挂载主机目录到容器目录
-e: 设置环境变量,此处指定 root 用户密码
-it: 以交互模式运行容器
-d: 使用后台方式运行容器
# 设置容器自启动
docker update --restart=always mysql

安装 Redis

# 拉取 Redis 镜像
docker pull redis:latest

# 创建并运行 Redis 容器
docker run -p 6379:6379 --name redis -it -d redis:latest

# 设置容器自启动
docker update --restart=always redis

参考

  1. Docker 命令,这一篇就够了
  2. Docker 教程 | 菜鸟教程
posted @ 2022-04-24 21:59  呵呵233  阅读(60)  评论(0编辑  收藏  举报