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服务。
评论区