Title: Docker笔记
Date: 2023-9-13 15:00:23
Author: lijilong
安装docker
以下为centos下安装docker步骤,其他系统参照官方文档:https://docs.docker.com/engine/install/centos/
1.移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2. 配置yum源
安装yum-utils工具
sudo yum install -y yum-utils
添加阿里云的Docker CE软件源
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装docker
安装Docker CE和相关的软件包
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 以下是在安装k8s的时候使用,安装指定版本的docker
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
4. 配置开机自启动
配置开机立即启动并且现在也启动
systemctl enable docker --now
5. 配置镜像加速
创建一个 /etc/docker/daemon.json 文件并写入配置内容,设置Docker的镜像仓库镜像地址为阿里云镜像地址(https://588115ga.mirror.aliyuncs.com)
配置阿里云镜像:阿里云控制台-容器镜像服务ACR ,镜像工具-镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://588115ga.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重新加载守护进程的配置,确保使用新的配置
sudo systemctl daemon-reload
# 重新启动Docker服务,以应用配置更改
sudo systemctl restart docker
查看docker版本,验证是否安装完成
docker --version

docker命令
1. 镜像操作
Docker官方镜像仓库 :docker hub
查看镜像:docker images
docker images 命令用于列出本地主机上的 Docker 镜像。它将显示已经下载到本地的镜像列表,包括镜像的名称、标签、镜像ID、大小等信息。以下是 “docker images” 命令的语法和示例:
docker images [选项] [镜像名称]
- 选项:用于设置列表的输出格式和其他参数。
- 镜像名称:可选,用于筛选并只显示指定名称的镜像。
示例使用:
docker images
上述命令将列出本地主机上的所有 Docker 镜像。
docker images nginx
上述命令将只显示名称为 “nginx” 的 Docker 镜像。
运行此命令后,将显示包含镜像名称、标签、镜像ID、创建时间和大小等信息的表格。

-
REPOSITORY:镜像所在的仓库名 -
TAG:镜像的标签 -
IMAGE ID:镜像的唯一ID -
CREATED:镜像的创建时间 -
SIZE:镜像的大小
下载镜像:docker pull
docker pull 命令用于从镜像仓库中下载一个或多个 Docker 镜像到本地。在使用 “docker run” 命令运行容器之前,通常需要先使用 “docker pull” 命令将所需的镜像下载到本地。以下是 “docker pull” 命令的语法和示例:
docker pull [选项] <镜像名称>
- 选项:用于设置镜像下载的参数,例如镜像标签、认证方式等。
- 镜像名称:要下载的 Docker 镜像的名称,通常是仓库名加上镜像标签。
示例使用:
docker pull nginx
上述命令将从 Docker Hub 下载最新版本的 “nginx” 镜像到本地。
docker pull ubuntu:20.04
上述命令将从 Docker Hub 下载标签为 “20.04” 的 Ubuntu 镜像到本地。
运行该命令后,Docker 将从指定的镜像仓库下载所需的镜像,并将其保存在本地主机上供后续使用。下载的镜像可以通过 “docker images” 命令进行查看。
删除镜像:docker rmi
docker rmi 命令用于删除本地主机上的一个或多个 Docker 镜像。当您不再需要某个镜像时,可以使用 “docker rmi” 命令将其从本地主机上删除,释放磁盘空间。以下是 “docker rmi” 命令的语法和示例:
docker rmi [选项] <镜像名称>
- 选项:用于设置删除镜像的参数,例如强制删除、删除依赖等。
- 镜像名称:要删除的 Docker 镜像的名称或镜像ID。
示例使用:
docker rmi nginx
上述命令将删除本地主机上名称为 “nginx” 的 Docker 镜像。
docker rmi ubuntu:20.04
上述命令将删除本地主机上标签为 “20.04” 的 Ubuntu 镜像。
注意:如果镜像正在被使用,或者有其他镜像以该镜像为基础构建而来,删除命令可能会失败。如果要强制删除镜像,可以使用 “-f” 或 “–force” 参数。
请小心使用 “docker rmi” 命令,确保不会删除您仍然需要的镜像。删除的镜像无法恢复,您可能需要重新下载或重新构建它们。
添加标签:docker tag
docker tag 命令用于为 Docker 镜像添加或修改标签。通过为镜像添加标签,可以更方便地识别和管理镜像,并在推送到镜像仓库时指定不同的标签。以下是 "docker tag" 命令的语法和示例:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
- SOURCE_IMAGE:已存在的本地镜像的名称或者标签(tag)。
- TAGET_IMAGE:打算为镜像设置的新的名称或者标签。
示例使用:
docker tag myimage:latest myrepo/myimage:v1.0
上述命令将本地名为 myimage:latest 的镜像打上名为 myrepo/myimage、标签为 v1.0 的新标签。
需要注意的是,Docker 镜像的名称由两个部分组成,即仓库名和镜像名,用斜杠 / 分隔开来,而标签是可选的。标签可以用于唯一标识一个特定版本或者变体的镜像,当没有指定标签时,默认为 latest。
构建镜像:docker build
docker build 命令用于根据 Dockerfile 构建一个自定义的 Docker 镜像。Dockerfile 是一个包含构建指令的文本文件,它定义了如何构建镜像的步骤和配置。
基本语法如下:
docker build [OPTIONS] PATH | URL | -
其中,PATH 是 Dockerfile 所在的路径。你可以指定一个本地路径,例如 .(表示当前目录),或者指定一个 URL 或 -(表示从标准输入读取 Dockerfile 内容)。
示例使用:
docker build -t my_image .
上述命令会在当前目录下的 Dockerfile 中定义的基础上构建一个名为 my_image 的镜像。
通过运行 docker build 命令,你可以根据 Dockerfile 自定义构建镜像,指定依赖项、运行环境、应用程序等。构建过程会按照 Dockerfile 中的指令逐步执行,每个指令都会生成一个中间镜像层。最后,生成的镜像可以用于创建和运行容器。
注意,在构建过程中,Docker 会利用构建缓存来提高效率,根据指令的变化情况判断是否需要重新构建。你可以通过使用 --no-cache 选项来禁用构建缓存,强制重新构建镜像:
docker build --no-cache -t my_image .
对于大型或复杂的镜像构建过程,你还可以使用 Docker Compose 或构建工具链(如 BuildKit)来更好地管理和优化构建过程。
推送镜像:docker push
docker push 命令用于将本地主机的 Docker 镜像推送到远程镜像仓库,使其在远程环境中可用。推送镜像到远程仓库后,其他用户可以从远程仓库获取该镜像并使用。
以下是 "docker push" 命令的语法和示例:
docker push <远程仓库地址>/<镜像名称>:<标签>
- 远程仓库地址:要推送镜像的远程仓库地址,如 Docker Hub、私有镜像仓库等。
- 镜像名称:要推送的 Docker 镜像的名称。
- 标签:要推送的镜像的标签。标签可以用来指定不同版本或不同配置的镜像。
示例使用:
docker push myorg/nginx:v1.0
上述命令将名为 "myorg/nginx" 的镜像以标签 "v1.0" 推送到远程仓库。
在执行 "docker push" 命令之前,请确保已经登录到要推送的远程仓库,使用 "docker login" 命令进行认证。此外,在推送之前,还需要确保本地主机上已经存在相应的镜像。
注意:推送镜像可能需要一定的时间,具体取决于镜像大小和网络连接速度。推送完成后,您可以在远程仓库中查看和使用该镜像。
2. 容器操作
查看容器:docker ps
docker ps 命令用于列出当前正在运行的容器。它可以展示容器的一些基本信息,如容器 ID、镜像、状态、端口映射等。
基本语法如下:
docker ps [OPTIONS]
示例使用:
docker ps
上述命令会列出当前正在运行的容器的信息。
默认情况下,docker ps 只显示正在运行的容器。如果想要查看所有的容器(包括已停止的容器),可以使用 -a 选项:
docker ps -a
上述命令会显示所有容器的信息,包括正在运行的和已停止的容器。
docker ps 还支持其他选项,例如 -q 用于只显示容器的 ID, -f 用于根据条件过滤容器, -s 用于显示容器的磁盘使用情况等。你可以运行 docker ps --help 命令查看所有可用选项的详细信息。
通过运行 docker ps 命令,你可以查看容器的状态和信息,方便管理和监控正在运行的容器。
运行容器:docker run
用于在 Docker 中运行一个新的容器,基于现有的镜像创建并启动一个容器。运行容器之前,Docker 首先会检查本地是否存在指定名称的镜像。如果不存在,它将从 Docker Hub 或其他配置的仓库下载镜像。
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
IMAGE是要使用的镜像名,可包含仓库名。TAG是可选的镜像标签,用于指定具体版本,默认为latest。COMMAND是可选的容器启动命令,用于覆盖镜像中定义的默认命令。ARG是可选的命令参数。
示例使用:
docker run -it ubuntu:20.04 /bin/bash
上述命令会以交互模式运行一个基于 ubuntu:20.04 镜像的容器,并执行 /bin/bash 命令。这将启动一个终端会话,并将你连接到容器的终端。
docker run --name mynginx -d --restart always -p 88:80 nginx
上述命令将在后台运行一个名为mynginx的容器,使用nginx镜像。
--name mynginx:为容器指定名称为mynginx。-d:以后台模式运行容器。--restart always:在容器退出或 Docker 守护进程启动时,自动重启容器。-p 88:80:将主机的端口 88 映射到容器的端口 80,以便通过主机的 88 端口访问容器中运行的 Nginx 服务。nginx:使用的 Docker 镜像名称为nginx。
通过运行 docker run 命令,你可以创建和运行一个容器,基于指定的镜像,并在容器内部执行指定的命令。你还可以使用其他选项来定制容器的行为,例如指定端口映射、挂载卷、设置环境变量等。要了解更多选项和用法,请参阅 Docker 官方文档。
重启容器:docker restart
docker restart 命令用于重新启动一个正在运行的容器。它会先停止容器,然后再启动它。重新启动容器时,会使用相同的配置和参数来启动。
基本语法如下:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
其中,CONTAINER 是要重新启动的容器的名称或 ID。你可以指定一个或多个容器的名称或 ID。
示例使用:
docker restart my_container
上述命令会重新启动名为 my_container 的容器。
通过运行 docker restart 命令,你可以在需要时对正在运行的容器进行重启,以使配置或应用程序的更改生效。重新启动容器时,容器内部的应用程序会重新启动,并使用更新后的配置。注意,重新启动容器可能导致服务中断,请谨慎使用。
停止容器:docker stop
docker stop 命令用于停止一个正在运行的容器。它会发送 SIGTERM 信号给容器内的主进程,让容器优雅地停止运行。
基本语法如下:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
其中,CONTAINER 是要停止的容器的名称或 ID。你可以指定一个或多个容器的名称或 ID。
示例使用:
docker stop my_container
上述命令会停止名为 my_container 的容器。
可选的选项可以用于定制停止行为,例如超时时间和停止信号等。例如,使用 -t 选项可以指定停止容器前等待的时间(默认为 10 秒):
docker stop -t 30 my_container
上述命令会停止名为 my_container 的容器,等待 30 秒后强制结束。
通过运行 docker stop 命令,你可以停止正在运行的容器,确保应用程序在退出时进行清理和处理相关资源。但请注意,并非所有应用程序都要求使用 docker stop 命令来停止容器,有些应用程序可能会自己处理退出信号。
删除容器:docker rm
docker rm 命令用于删除一个或多个容器。删除容器时,Docker 会自动清理容器的相关资源(如网络、卷等)。
基本语法如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
其中,CONTAINER 是要删除的容器的名称或 ID。你可以指定一个或多个容器的名称或 ID。
示例使用:
docker rm my_container
上述命令会删除名为 my_container 的容器。
可选的选项可以用于定制删除行为,例如删除正在运行的容器或强制删除容器等。例如,使用 -f 选项可以强制删除正在运行的容器:
docker rm -f my_container
上述命令会强制删除名为 my_container 的容器,即使它正在运行中。
通过运行 docker rm 命令,你可以删除无用的容器,确保容器资源得到清理和释放,节省空间和资源。但是请注意,删除容器时会永久丢失容器内的数据,因此请谨慎使用 docker rm 命令。
docker安装java
要在Docker中安装Java 8,你可以按照以下步骤进行操作:
-
拉取Java 8镜像:运行以下命令从Docker镜像仓库中拉取Java 8镜像:
docker pull openjdk:8-jdk -
运行Java 8容器:使用以下命令在Docker中运行Java 8容器:
docker run -it openjdk:8-jdk bash
这将创建一个新的Docker容器,并在其中启动一个交互式的bash终端。
-
现在,你可以在Docker容器中使用Java 8了。例如,可以运行以下命令来查看Java版本:
java -version这将显示安装的Java版本信息。
docker安装mysql
1. 创建 MySQL配置文件
要在Docker上挂载MySQL的配置文件,你可以按照以下步骤进行操作:
-
首先,创建一个用于挂载配置文件的目录。
mkdir -p /data/mysql/conf -
创建MySQL配置文件
my.cnf。cd /data/mysql/conf vi my.cnf按
i进入编辑模式,然后复制以下内容到文件中粘贴,然后按:wq执行保存并退出。[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] init_connect='SET collation_connection = utf8mb4_unicode_ci' init_connect='SET NAMES utf8mb4' character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci skip-character-set-client-handshake skip-name-resolve
2. 拉取mysql镜像
下载mysql5.7版本的镜像
docker pull mysql:5.7

3. 启动mysql容器
创建一个名为 “mysql-5.7” 的容器,使用MySQL 5.7镜像,并进行端口映射、路径挂载和环境变量配置,可以使用主机的3306端口连接至运行在容器中的MySQL数据库。
docker run -p 3306:3306 --name mysql-5.7 \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
--restart=always \
-d mysql:5.7
-p 3306:3306:端口映射,将主机的3306端口与容器的3306端口进行映射,以便通过主机的3306端口访问MySQL服务。--name mysql-5.7:重新命名,将启动的容器命名为mysql-5.7-v /data/mysql/log:路径挂载,将主机上的日志目录挂载到容器内的相应目录,以实现数据的持久化存储和配置的修改。-v /data/mysql/data:路径挂载,将主机上的数据目录挂载到容器内的相应目录,以实现数据的持久化存储和配置的修改。-v /data/mysql/conf:路径挂载,将主机上的配置文件目录挂载到容器内的相应目录,以实现数据的持久化存储和配置的修改。- -e MYSQL_ROOT_PASSWORD=root:环境变量配置,设置MySQL的root用户的密码为"root"。
--restart=always:自动重启,设置容器为始终自动重启,以确保MySQL服务在意外停止后能够自动恢复运行。-v /data/mysql/log:路径挂载,将主机上的日志、数据和配置文件目录挂载到容器内的相应目录,以实现数据的持久化存储和配置的修改。

docker安装 Nacos
需要有java环境,和数据库连接。
1. 创建 Nacos 的配置文件
要在 Docker 上挂载 Nacos 的配置文件,你可以按照以下步骤进行操作:
-
创建一个目录,用于存放 Nacos 的配置文件。例如,我们创建一个名为
/data/nacos/nacos-config的目录。mkdir -p /data/nacos/nacos-config -
在
nacos-config目录中,创建一个名为custom.properties的配置文件,并根据需要进行配置。cd /data/nacos/nacos-config/ vi custom.properties按
i进入编辑模式,然后复制以下内容到文件中粘贴,然后依次按下:wq执行保存并退出server.port=8848 spring.datasource.platform=mysql spring.datasource.url=jdbc:mysql://127.0.0.1:3306/<database_name>?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false spring.datasource.username=root spring.datasource.password=root
2. 拉取 Nacos 镜像
拉取 Nacos Server 镜像
docker pull nacos/nacos-server:latest
3. 启动 Nacos 服务
-
创建并启动 Nacos Server 容器,并将
nacos-config目录挂载到容器中的/home/nacos/init.d/custom.properties:docker run --name nacos -e MODE=standalone -p 8848:8848 -v /data/nacos/nacos-config:/home/nacos/init.d/custom.properties -d nacos/nacos-server:latest在上述命令中,我们使用
docker run创建并启动一个 Nacos Server 容器。--name: 参数用于指定容器的名称为nacos-e MODE=standalone:参数用于设置 Nacos 运行模式为单机模式-p 8848:8848:参数用于将容器的 8848 端口映射到主机的 8848 端口-v /data/nacos/nacos-config:/home/nacos/init.d/custom.properties:将nacos-config目录挂载到容器中的/home/nacos/init.d/custom.properties,这样就能够将自定义的配置文件加载到容器中。-d:参数表示在后台运行容器。 -
等待一段时间,Nacos 服务会启动完成。你可以通过访问
http://localhost:8848/nacos来访问 Nacos 控制台。
4. 访问Nacos 控制台
运行上述命令后,将会创建一个 Nacos Server 容器,并启动其中的 Nacos 服务。等待一段时间,Nacos 服务会启动完成。你可以通过访问 http://localhost:8848/nacos 来访问 Nacos 控制台。
现在,你已经成功安装并运行了 Nacos 的 Docker 容器,并将配置文件挂载到容器中。你可以在 nacos-config 目录下编辑和管理 Nacos 的配置文件。
docker安装Redis
1. 准备redis配置文件内容
要在 Docker 上挂载 Redis的配置文件,你可以按照以下步骤进行操作:
-
创建一个目录,用于存放 Redis的配置文件。例如,我们创建一个名为
/data/redis/conf的目录。mkdir -p /data/redis/conf -
在
conf目录中,创建一个名为redis.conf的配置文件,并根据需要进行配置。cd /data/redis/conf vi redis.conf按
i进入编辑模式,然后复制以下内容到文件中粘贴,然后按:wq执行保存并退出appendonly yes port 6379 bind 0.0.0.0
2. 拉取Redis镜像
docker pull redis:6.2.5
3. 启动Redis服务
运行以下命令
docker run -d -p 6379:6379 --restart=always \
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
--name redis redis:6.2.5 \
redis-server /etc/redis/redis.conf
-d表示在后台运行容器。-p 6379:6379将主机的6379端口映射到容器的6379端口。这样,你可以通过主机上的6379端口访问Redis服务。--restart=always设置在容器退出时自动重启容器。-v /data/redis/conf/redis.conf:/etc/redis/redis.conf挂载主机上的Redis配置文件,将/data/redis/conf/redis.conf替换为实际的配置文件路径。-v /data/redis/data:/data挂载主机上的数据目录用于持久化存储Redis数据,将/data/redis/data替换为实际的数据目录路径。--name redis指定容器的名称为redis。redis:6.2.5指定使用Redis 6.2.5的镜像。redis-server /etc/redis/redis.conf在容器启动时指定使用/etc/redis/redis.conf作为配置文件启动Redis服务。
评论区