Docker简单快速入门
1. 安装Docker
基于 Ubuntu 24.04 LTS 安装Docker 。
# 更新包索引并安装依赖包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加Docker的APT源(使用阿里云的镜像源)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装Docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 安装后查看docker版本
docker -v# 运行测试容器
docker run hello-world# 配置Docker非root用户运行(可以查看用户管理相关指令)
sudo usermod -aG docker $USER# 启动一个新的shell会话,更改活动的用户组,让新的用户组在当前会话中生效
newgrp docker
2. 用户管理相关指令
2.1 添加用户到 Docker 组
sudo usermod -aG docker $USER
2.2 查看 Docker 组中的用户
getent group docker
2.3 从 Docker 组中移除用户
sudo gpasswd -d $USER docker
2.4 检查用户所属组
groups $USER
注:$USER表示当前登录的用户名称
3. 查看Docker信息
docker info
Client: Docker Engine - Community
Version: 27.0.3 # 客户端的 Docker 版本
Context: default # 当前使用的 Docker 上下文
Debug Mode: false # 客户端调试模式是否启用
Plugins: # 客户端插件信息
buildx: Docker Buildx (Docker Inc.) # Docker Buildx 插件
Version: v0.15.1 # Buildx 插件版本
Path: /usr/libexec/docker/cli-plugins/docker-buildx # Buildx 插件路径
compose: Docker Compose (Docker Inc.) # Docker Compose 插件
Version: v2.28.1 # Compose 插件版本
Path: /usr/libexec/docker/cli-plugins/docker-compose # Compose 插件路径Server: # 服务器部分,显示 Docker 服务器的状态和配置信息
Containers: 0 # 服务器上存在的总容器数
Running: 0 # 当前正在运行的容器数
Paused: 0 # 当前暂停的容器数
Stopped: 0 # 已停止的容器数
Images: 0 # 服务器上存在的总镜像数
Server Version: 27.0.3 # Docker 服务器版本
Storage Driver: overlay2 # 使用的存储驱动类型
Backing Filesystem: extfs # 存储驱动的底层文件系统
Supports d_type: true # 文件系统是否支持 d_type(目录类型)
Using metacopy: false # 是否启用了元数据拷贝功能
Native Overlay Diff: true # 是否使用本地 Overlay 差异
userxattr: false # 是否启用用户扩展属性
Logging Driver: json-file # 使用的日志驱动类型
Cgroup Driver: systemd # 使用的 cgroup 管理器
Cgroup Version: 2 # 使用的 cgroup 版本
Plugins: # 插件信息
Volume: local # 可用的卷插件
Network: bridge host ipvlan macvlan null overlay # 可用的网络插件
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog # 可用的日志插件
Swarm: inactive # Swarm 模式的状态
Runtimes: runc io.containerd.runc.v2 # 可用的运行时
Default Runtime: runc # 默认的运行时
Init Binary: docker-init # 使用的初始化二进制文件
containerd version: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41 # containerd 版本
runc version: v1.1.13-0-g58aa920 # runc 版本
init version: de40ad0 # init 版本
Security Options: # 启用的安全选项
apparmor # AppArmor 安全选项
seccomp # Seccomp 安全选项
Profile: builtin # 使用的 Seccomp 配置文件
cgroupns # cgroup 命名空间安全选项
Kernel Version: 6.8.0-31-generic # 操作系统内核版本
Operating System: Ubuntu 24.04 LTS # 操作系统及其版本
OSType: linux # 操作系统类型
Architecture: x86_64 # 系统架构类型
CPUs: 2 # 可用的 CPU 数量
Total Memory: 3.778GiB # 总内存大小
Name: liber-VMware-Virtual-Platform # 机器名称
ID: 506c4663-2c48-4b6e-a3a2-7868e2eb6990 # Docker 守护进程的唯一 ID
Docker Root Dir: /var/lib/docker # Docker 根目录
Debug Mode: false # Docker 守护进程调试模式是否启用
Experimental: false # 是否启用了实验特性
Insecure Registries: # 配置的不安全镜像仓库
127.0.0.0/8 # 允许本地网络范围内的不安全仓库
Live Restore Enabled: false # 是否启用了 Live Restore 功能(容器在 Docker 守护进程重启时保持运行)
4. 创建Nginx容器
4.1 配置镜像加速器
4.1.1 获取阿里云加速地址
4.1.2 编辑Docker配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
参考文献:配置镜像加速器_容器镜像服务(ACR)-阿里云帮助中心
4.2 拉取Nginx镜像
docker pull nginx
4.3 运行 Nginx 容器
docker run --name mynginx -d -p 80:80 nginx
5. 镜像相关
5.1 查看本地所有镜像
docker images
例:
liber@liber-VMware-Virtual-Platform:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MBREPOSITORY:镜像的名称或存储库的名称。这个名称标识了镜像的来源或用途。
TAG: 镜像的标签,用于标识镜像的不同版本。
IMAGE ID: 镜像的唯一标识符。Docker 使用这个标识符来唯一地识别镜像。
CREATED: 镜像的创建时间,表示这个镜像在什么时候被构建。
SIZE: 镜像的大小,表示镜像占用的磁盘空间。
5.2 查看特定镜像的详细信息
docker inspect <image_id>
liber@liber-VMware-Virtual-Platform:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MB
liber@liber-VMware-Virtual-Platform:~$ docker inspect 605c77e624dd
5.3 拉取镜像
docker pull <repository>:<tag>
例:
liber@liber-VMware-Virtual-Platform:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MB
liber@liber-VMware-Virtual-Platform:~$ docker pull nginx:latest
5.4 标记镜像
docker tag <image_id> <repository>:<tag>
例:docker tag 605c77e624dd mynginx:v1
5.5 查看镜像的构建历史
docker history <image_id>
5.6 删除镜像
docker rmi <image_id>
例:
liber-VMware-Virtual-Platform:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MB
liber@liber-VMware-Virtual-Platform:~$ docker rmi 605c77e624dd
Error response from daemon: conflict: unable to delete 605c77e624dd (cannot be forced) - image is being used by running container fb2661b753dd #删除的容器在运行需要先停止
liber@liber-VMware-Virtual-Platform:~$ docker stop mynginx #停止容器
mynginxliber@liber-VMware-Virtual-Platform:~$ docker rmi 605c77e624dd #再次在线删除指令
Error response from daemon: conflict: unable to delete 605c77e624dd (must be forced) - image is being used by stopped container fb2661b753dd #镜像正在被一个停止的容器引用。在这种情况下,你需要先删除这个停止的容器,然后再删除镜像。liber@liber-VMware-Virtual-Platform:~$ docker ps -a #列出所有容器,包括停止的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb2661b753dd nginx "/docker-entrypoint.…" 41 minutes ago Exited (0) 7 minutes ago mynginx
liber@liber-VMware-Virtual-Platform:~$ docker rm fb2661b753dd #删除容器
fb2661b753dd
liber@liber-VMware-Virtual-Platform:~$ docker rmi 605c77e624dd #移除镜像
Untagged: nginx:latest
Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
# 镜像的强制删除
docker rmi -f <image_id>
5.7 导出和导入镜像
5.7.1 导出镜像为tar文件
docker save -o <path_to_tar> <image_id>
例:
liber@liber-VMware-Virtual-Platform:~$ docker save -o nginx.tar 605c77e624dd
liber@liber-VMware-Virtual-Platform:~$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 nginx.tar snap
5.7.2 导入tar文件为镜像
docker load -i <path_to_tar>
6. 容器相关
常用选项
-d
: 后台运行容器,并返回容器 ID。-i
: 保持容器的标准输入(stdin)打开,即使没有附加到容器上。-t
: 为容器分配一个伪终端,使你能够在容器内运行命令行界面。通常与-i
一起使用。--name <container_name>
: 为容器指定一个名称。-e <ENV_VAR>=<value>
: 设置环境变量。-p <host_port>:<container_port>
: 端口映射,将主机的端口映射到容器的端口。-v <host_dir>:<container_dir>
: 卷挂载,将主机目录或文件挂载到容器的目录或文件。--rm
: 在容器停止后自动删除容器。--network <network_name>
: 指定容器连接到的网络。--link <name_or_id>:alias
: 添加链接到另一个容器。
6.1 创建新的容器
6.1.1 创建后台运行容器
docker run --name <container_name> -d -p <host_port>:<container_port> <image>
#使用
docker run
命令来创建并运行一个新的容器docker run --name mynginx -d -p 80:80 nginx
--name mynginx
:指定容器的名称为mynginx
。-d
:让容器在后台运行(分离模式)。-p 80:80
:将主机的 80 端口映射到容器的 80 端口。nginx
:使用的镜像名称。
6.1.2 创建运行交互式容器
docker run -it [options] <image> [command]
[options] 是一个占位符,表示你可以在这里添加其他选项来配置容器的运行环境。
以下是一些常用的选项:
--name <container_name>: 为容器指定一个名称,这样你可以通过名称而不是容器 ID 来引用容器。
-d: --detach,让容器在后台运行,并返回容器 ID。使用这个选项可以让容器在后台继续运行,而不阻塞当前终端。
-p <host_port>:<container_port>: 端口映射,将主机的端口映射到容器的端口
-v <host_dir>:<container_dir>: 卷挂载,将主机目录或文件挂载到容器的目录或文件。
-e <ENV_VAR>=<value>: 设置环境变量,在容器运行时配置。
--rm: 在容器停止后自动删除容器。
--network <network_name>: 指定容器连接到的网络。
--link <name_or_id>:alias: 添加链接到另一个容器。
例子:
liber@liber-VMware-Virtual-Platform:~$ docker run -it --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest /bin/bash
- docker run: 创建并运行一个新的容器。
- -it: 交互模式运行容器并分配伪终端。
- --name mysql: 将容器命名为mysql。
- -e MYSQL_ROOT_PASSWORD=123456: 设置环境变量,指定 MySQL 的 root 用户密码。
- mysql:latest: 使用官方 MySQL 镜像的最新版本。
- /bin/bash: 在容器启动时运行的命令。
使用官方的 MySQL 启动命令:docker-entrypoint.sh mysqld
连接到运行中的 MySQL 容器:
liber@liber-VMware-Virtual-Platform:~$ docker exec -it mysql mysql -uroot -p #进入一个正在运行的容器
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
6.2 查看当前运行的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
注解:
CONTAINER ID: 容器的唯一标识符。
IMAGE: 用于创建容器的镜像名称。
COMMAND: 容器启动时运行的命令。
CREATED: 容器创建的时间。STATUS(通常包含以下5种): 容器的当前状态,包括运行时间。
1. Up: 容器正在运行。
2. Exited: 容器已停止运行。
3. Created: 容器已创建但未启动。
4. Paused: 容器已暂停。
5. Restarting:容器正在重启。PORTS: 容器暴露的端口信息。
NAMES: 容器的名字,如果没有指定名字,Docker会自动生成一个随机名字。
6.3 查看所有容器(包括停止的容器)
docker ps -a
6.4 查看最近创建的容器
docker ps -l
6.5 查看容器日志
docker logs <CONTAINER ID>
例:
liber@liber-VMware-Virtual-Platform:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb2661b753dd nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx
liber@liber-VMware-Virtual-Platform:~$ docker logs fb2661b753dd
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/07/20 00:48:50 [notice] 1#1: using the "epoll" event method
2024/07/20 00:48:50 [notice] 1#1: nginx/1.21.5
6.6 检查容器状态
docker inspect --format '{{.State.Status}}' <container_id>
例:
liber@liber-VMware-Virtual-Platform:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb2661b753dd nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx
liber@liber-VMware-Virtual-Platform:~$ docker inspect --format '{{.State.Status}}' fb2661b753dd
running
6.7 启动容器
docker start <container-name>
6.8 停止容器
docker stop <container-name>
6.9 删除容器
docker rm <container-name>
6.10 访问容器
docker exec -it <container_name_or_id> <command>
docker exec
: 在一个正在运行的容器中执行命令。-it
: 交互模式,分配一个伪终端。<container_name_or_id>
: 目标容器的名称或 ID。<command>
: 要在容器中执行的命令(如/bin/bash
)。
7. 网络配置
7.1 查看所有网络
docker network ls
例:
liber@liber-VMware-Virtual-Platform:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e4a84feb27d8 bridge bridge local
21db5cf6fb61 host host local
b86a38a046d2 none null localNETWORK ID: 网络的唯一标识符。Docker使用这个标识符来唯一地识别网络。
NAME: 网络的名称。用户可以使用这个名称来引用和管理网络。
DRIVER: 网络驱动程序,用于管理网络的实现方式。常见的驱动程序包括 bridge、host、null 等。
SCOPE: 网络的作用范围,表示网络的可见性范围。local 表示网络仅在本地Docker守护进程上可见。
7.2 查看特定网络
docker network inspect <network_id>
例:
liber@liber-VMware-Virtual-Platform:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MB
liber@liber-VMware-Virtual-Platform:~$ docker inspect 605c77e624dd
7.3 创建网络
docker network create mynetwork
7.4 连接网络
在启动容器时,通过 --network
选项将其连接到自定义网络。
liber@liber-VMware-Virtual-Platform:~$ docker run --name mynginx --network mynetwork -d -p 80:80 nginx
如果容器已经在运行,可以使用 docker network connect
命令将其连接到自定义网络。
docker network connect mynetwork mynginx
7.5 访问网络
liber@liber-VMware-Virtual-Platform:~$ docker exec -it mynginx /bin/bash #进入容器
root@0004faebf897:/# curl mynginx:80 #访问网络
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
8. 数据管理
8.1 数据卷
数据卷是 Docker 管理的专用目录,存储在主机文件系统中,但 Docker 提供了对其的完全管理。
8.1.1 创建数据卷
数据卷是 Docker 管理的专用目录,存储在主机文件系统中,但 Docker 提供了对其的完全管理。
docker volume create myvolume
8.1.2 查看数据卷
docker volume ls
liber@liber-VMware-Virtual-Platform:~$ docker volume ls
DRIVER VOLUME NAME
local 3e257cc31097122d7dbd2341b5610853473a98b71708e676099648c49903b65b
local myvolume
8.1.3 查详细信息
docker volume inspect myvolume
liber@liber-VMware-Virtual-Platform:~$ docker volume inspect myvolume
[
{
"CreatedAt": "2024-07-20T15:37:41+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
"Name": "myvolume",
"Options": null,
"Scope": "local"
}
]
8.1.4 使用数据卷
将数据卷挂载到容器中,使得容器可以持久化存储数据。
docker run -d -p 80:80 -v myvolume:/usr/share/nginx/html nginx
-v myvolume:/usr/share/nginx/html:将数据卷myvolume挂载到容器的/usr/share/nginx/html目录。
8.1.5 备份数据卷
将数据卷中的数据备份到主机目录。
docker run --rm -v myvolume:/volume -v $(pwd):/backup mginx tar cvf /backup/backup.tar /volume
--rm
:容器在退出时自动删除。-v myvolume:/volume
:将数据卷myvolume
挂载到容器的/volume
目录。-v $(pwd):/backup
:将当前主机目录挂载到容器的/backup
目录。tar cvf /backup/backup.tar /volume
:将/volume
目录(即数据卷内容)打包为backup.tar
并存储在主机的当前目录。liber@liber-VMware-Virtual-Platform:~$ docker run --rm -v myvolume:/volume -v $(pwd):/backup nginx tar cvf /backup/backup.tar /volume
tar: Removing leading `/' from member names
/volume/
/volume/50x.html
/volume/index.html
liber@liber-VMware-Virtual-Platform:~$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 backup.tar nginx_latest.tar snap
8.1.6 恢复数据卷
docker run --rm -v myvolume:/volume -v $(pwd):/backup nginx bash -c "cd /volume && tar xvf /backup/backup.tar --strip 1"
tar xvf /backup/backup.tar --strip 1
:将backup.tar
文件解压到/volume
目录中,--strip 1
选项用于去除路径中的第一级目录。liber@liber-VMware-Virtual-Platform:~$ docker run --rm -v myvolume:/volume -v $(pwd):/backup nginx bash -c "cd /volume && tar xvf /backup/backup.tar --strip 1"
volume/50x.html
volume/index.htmlliber@liber-VMware-Virtual-Platform:~$ docker run -it --name new_nginx -v myvolume:/volume -p 81:82 nginx /bin/bash #运行并挂载数据卷
root@14c73202ba4f:/# cd volume #进入容器后,访问挂载目录
root@14c73202ba4f:/volume# ls
50x.html index.html
8.2 绑定挂载
绑定挂载将主机文件系统中的文件或目录挂载到容器中,可以在容器和主机之间共享数据。
docker run -v /path/on/host:/path/in/container <image> <command>
/path/on/host:主机上的路径,是你希望挂载到容器内的文件或目录的路径。
/path/in/container:容器内的路径,是你希望将主机文件或目录挂载到容器内的文件或目录的路径。
例子:
root@liber-VMware-Virtual-Platform:/opt# mkdir -p /opt/nginx
root@liber-VMware-Virtual-Platform:/opt# echo "Docker Nginx" > /opt/nginx/index.html
root@liber-VMware-Virtual-Platform:/opt# docker run -d -p 80:80 -v /opt/nginx:/usr/share/nginx/html nginx
9befe205cddd3719993bd8bef47eb4ced0b6408cd7142f409a21287b766f19e1
root@liber-VMware-Virtual-Platform:/opt# echo "Update Docker Nginx" > /opt/nginx/index.html可以访问80端口的地址检验实时生效。
9. Docker Compose
9.1 安装Docker Compose
# 安装docker-compose
sudo wget "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -O /usr/local/bin/docker-compose# 赋予执行文件
sudo chmod +x /usr/local/bin/docker-compose# 验证安装
docker-compose --version
9.2 基本命令
9.2.1 启动服务
docker-compose up
9.2.2 后台启动服务
docker-compose up -d
9.2.3 停止服务
docker-compose down
9.2.4 查看服务日志
docker-compose logs
9.2.5 查看运行中的容器
docker-compose ps
9.2.6 构建或重新构建服务
docker-compose build
9.3 简单案例
9.3.1 项目结构:
9.3.2 docker-compose.yml
version: '3.8' # 指定 docker-compose 文件的版本services: # 定义应用的各个服务web: # 服务名称image: nginx:latest # 使用的镜像ports:- "80:80" # 端口映射volumes:- ./:/usr/share/nginx/html # 绑定挂载
volumes: # 定义数据卷db_data:
9.3.3 启动结果
liber@liber-VMware-Virtual-Platform:/opt/web$ docker-compose up
[+] Running 1/0
✔ Container web-web-1 Created 0.0s
Attaching to web-web-1
web-web-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web-web-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web-web-1 | 10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled
web-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
web-web-1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: using the "epoll" event method
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: nginx/1.21.5
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: OS: Linux 6.8.0-31-generic
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: start worker processes
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: start worker process 24
web-web-1 | 2024/07/20 09:49:57 [notice] 1#1: start worker process 25
10. 总结
通过Ubuntu 24.04 LTS完成Docker 和Docker-Compose安装,以及实现docker的简单入门。需要注意Docker和Docker之间的版本兼容性。
相关文章:

Docker简单快速入门
1. 安装Docker 基于 Ubuntu 24.04 LTS 安装Docker 。 # 更新包索引并安装依赖包 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置 curl -fsSL https://mirror…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 图像物体的边界(200分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…...

【无人机】低空经济中5G RedCap芯片的技术分析报告
1. 引言 图一. 新基建:低空经济 低空经济作为一种新兴的经济形态,涵盖了无人机、电动垂直起降飞行器(eVTOL)、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进,5G RedCap(Reduced Capability&a…...

MongoDB教程(二十一):MongoDB大文件存储GridFS
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、GridFS…...

vue 搜索框
效果 创建搜索组件: 在Vue项目中,首先需要创建一个搜索组件。这个组件通常包含一个输入框和一个搜索按钮。使用v-model指令将输入框与组件的数据属性(如searchKeyword)进行双向绑定,以便获取用户输入的关键词。处理搜索…...
国科大作业考试资料-人工智能原理与算法-2024新编-第五次作业整理
1、本题以井字棋(圈与十字游戏)为例练习博弈中的基本概念。定义X_n为恰好有n个X而没有O 的行、列或者对角线的数目。同样O_n为正好有n 个O的行、列或者对角线的数目。效用函数给 X_3=1的棋局+1, 给O_3=1的棋局-1。所有其他终止状态效用值为0。对于非终止状态,使用线性的 …...
C++五子棋(未做完,但能玩,而且还不错)
代码放下面了,关于步骤介绍的我以后再完善一下。 #include<bits/stdc.h> #include<cstdio> #include<cstdlib> #include<ctime> #include<windows.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x…...
二分查找代码详解
二分查找代码实现 以下是完整的代码和解释: #include <stdio.h>int binarySearch(int arr[], int length, int target) {int left 0;int right length - 1;while (left < right) {int mid left (right - left) / 2; // 防止溢出if (arr[mid] target…...

uniapp的h5,读取本地txt带标签的文件
效果图 使用的回显的标签是u-parse,下面的网址讲了这个标签的相关 https://www.cnblogs.com/huihuihero/p/12978903.html 导入此插件 https://ext.dcloud.net.cn/plugin?id364 使用 uni.request({// 本地文件url: "/static/互联网医院医师端用户协议.txt…...

韦东山嵌入式linux系列-具体单板的按键驱动程序(查询方式)
1 GPIO 操作回顾 (1)使能模块; (2)设置引脚的模式(工作于GPIO模式); (3)设置GPIO本身(输入/输出); (4&…...

如何使用 API list 极狐GitLab 群组中的镜像仓库?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
PHP设计模式-简单工厂模式
核心: 一、定义一个接口类里面写规定好的方法。 interface Message{public function send(array $params);public function getMessage(array $params);public function getCode(array $params);} 二、定义产品类 、产品类继承接口类 class AlliYunSms implements …...

C语言航空售票系统
以下是系统部分页面 以下是部分源码,需要源码的私信 #include<stdio.h> #include<stdlib.h> #include<string.h> #define max_user 100 typedef struct ft {char name[50];//名字char start_place[50];//出发地char end_place[50];//目的地char …...
Oracle 19c打Datapatch数据补丁报错处理
Oracle 19c打Datapatch数据补丁报错处理 错误分析重新编译补丁验证安装完数据库补丁后,在数据补丁的步骤收到以下报错: Connecting to database...OK Gathering database info...done Bootstrapping registry and package to current versions...done Determining current s…...

Linux shell编程学习笔记66:ping命令 超详细的选项说明
0 前言 网络信息是电脑网络信息安全检查中的一块重要内容,Linux和基于Linux的操作系统,提供了很多的网络命令,今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说, ping 命令 会…...

SSL/TLS和SSL VPN
1、SSL/TLS SSL安全套接字层:是一种加密协议,用于在网络通信中建立安全连接。它在应用层和传输层(TCP/IP)之间提供数据加密、服务器身份验证以及信息完整性验证 SSL只保护TCP流量,不保护UDP协议 TLS:传输层…...
浅谈WebSerice
一. 什么是WebService Web Service也称为web服务,它是一种跨编程语言和操作系统平台的远程调用技术。Web Service采用标准的SOAP协议传输(SOAP:Simple Object Access Protocol简单对象访问协议,soap属于w3c标准。并且soap协议是基…...
linux快速入门-学习笔记
linux快速入门-学习笔记 第一章:Linux系统概念及命令学习Linux系统基本概念命令终端介绍命令格式介绍Linux系统辨别目录与文件的方法通过文件详细属性辨别ls 查看目录/文件命令Linux 系统下的归属关系命令行编辑技巧Linux 基本权限的类别课后练习 第二章:…...
科普文:5种Linux下软件部署方式说明
在Linux世界里,高效、灵活地安装和管理软件是每个系统管理员和开发者的基本功。从传统的RPM包管理,到便捷的YUM软件仓库,再到颠覆性的Docker容器技术,Snap,源码安装,每一种方法都有其独到之处,适…...
Redisson中的RBlockingQueue的使用场景及例子
Redisson 的 RBlockingQueue 是一个实现了 Java BlockingQueue 接口的分布式队列,它可以用于在分布式系统中实现生产者-消费者模式。RBlockingQueue 提供了线程安全的阻塞队列操作,允许生产者在队列满时阻塞,消费者在队列空时阻塞,…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...
【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
文章目录 📌 前言🧰 一、前期准备✅ 安装 Kali Linux✅ 获取支持监听模式的无线网卡 🛠 二、使用 Kali Linux 进行 WiFi 安全测试步骤 1:插入无线网卡并确认识别步骤 2:开启监听模式步骤 3:扫描附近的 WiFi…...

前端异步编程全场景解读
前端异步编程是现代Web开发的核心,它解决了浏览器单线程执行带来的UI阻塞问题。以下从多个维度进行深度解析: 一、异步编程的核心概念 JavaScript的执行环境是单线程的,这意味着在同一时间只能执行一个任务。为了不阻塞主线程,J…...