Appearance
Docker 尚硅谷速通
一、初识 Docker
Docker 架构与容器化
docker pull redis:连接 Docker 应用市场,下载 redis 镜像到本机
docker run redis:在本机找 redis 镜像,并启动 redis 应用,启动的应用称作 容器。
docker build xxx:制作镜像
docker push xxx:推动制作的镜像到应用市场
TIP
镜像可以理解为软件包,而容器则理解为通过软件包启动的应用。

理解容器:

安装 Docker Engine
Debian
bash
# 删除旧版本
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)
# 设置Docker的apt仓库
## 添加 Docker 的官方 GPG 密钥
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
## 将仓库添加到Apt源中
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
sudo apt update
# 安装Docker软件包
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证Docker是否启动
sudo systemctl status docker
# 手动启动Docker
sudo systemctl start docker
# 开机启动Docker
sudo systemctl enable docker --now二、命令
镜像操作
docker search nginx:搜索 Docker Hub 中与 nginx 相关的镜像。docker pull nginx:下载最新版本的 nginx 镜像。docker pull nginx:1.26.0:下载指定版本(1.26.0)的 nginx 镜像。docker images:列出本地已下载的所有镜像。docker rmi IMAGE-ID:根据指定的镜像 ID 删除本地镜像。
容器操作
docker run nginx:启动容器docker run -d --name mynginx -p 8080:80 nginx:在后台运行基于 nginx 镜像的容器并命名为 mynginx,将 nginx 的 80 端口映射到外部的 8080,能通过http://localhost:8080访问到。-d:后台运行--name mynginx:为容器指定名称-p 8080:80:端口映射
docker ps:查看运行的容器docker ps -a:查看所有容器,包括未运行的docker start xxx:启动容器docker stop xxx:停止容器docker restart xxx:重启容器docker stats CONTAINER-ID:查询容器状态docker logs CONTAINER-ID:查询容器日志docker rm CONTAINER-ID:删除容器docker exec -it CONTAINER-ID /bin/bash:进入容量内部的文件系统
bash
C:\Users\zheng>docker exec -it d488a0d22ff0 /bin/bash
root@d488a0d22ff0:/# cd /usr/share/nginx/html
root@d488a0d22ff0:/usr/share/nginx/html# ls
50x.html index.html
root@d488a0d22ff0:/usr/share/nginx/html# cat > index.html << 'EOF'
<h1>Hello, Docker!!!</h1>
EOF
root@d488a0d22ff0:/usr/share/nginx/html# cat index.html
<h1>Hello, Docker!!!</h1>
root@d488a0d22ff0:/usr/share/nginx/html# exit
exit保存分享镜像
docker commit:从容器创建镜像docker commit -m "update index.html" myngnix mynginx:v1.1:根据容器 myngnix 创建镜像myngix:v1.1,提交信息为update index.html
docker save:保存镜像docker save -o mynginx.tar mynginx:v1.1:保存镜像mynginx:v1.1为mynginx.tar
docker load:加载镜像docker load -i mynginx.tar:加载mynginx.tar镜像
docker login:登录 Dockerdocker tag:设置标签docker push:推动到 docker hub 远端仓位
三、存储和网络
目录挂载
-v /app/nghtml:/usr/share/nginx/html:目录挂载。将本机的 /app/nghtml 目录挂载到 docker 容器中的 /usr/share/nginx/html,这样不用进入容器内部,只需要修改本机的文件就行。而且当前容器被删除时,本机目录数据没被删除,后续再次创建新容器也能使用 /app/nghtml 下的数据。
卷映射
-v ngconf:/etc/nginx:卷映射。在目录 /var/lib/docker/volumes/<volume-name> 可以查看到卷。将本机 docker 的 ngconf 卷映射到 /etc/nginx 目录。
docker volume create <volume-name>:创建卷docker volume ls:查看卷列表docker volume inspect <volume-name>:查看卷
自定义网络
执行 docker run -d -p:88:80 --name app1 mynginx:v1.1 和 docker run -d -p:99:80 --name app2 mynginx: 创建两个容器:

执行 docker container inspect app1 和 docker container inspect app2,查看容器内部情况,可以找到内部的 IP 地址。而网关就是共同的 172.17.0.1。

而两个容器之间是可以通过共同网关互相访问的,只需要使用 容器IP+容器端口 就行。

默认的 docker0 就是桥接网络,当然是可以自定义的:

以新桥接网络创建两个新容器 docker run -d -p 88:80 --network test-net --name app1 mynginx:v1.1。
这样就能在 app1 容器通过域名访问到 app2 了:


四、Dockers Compose
docker compose up -d:上线docker compose down:下线docker compose start x1 x2 x3:启动docker compose stop x1 x2 x3:停止docker compose scale x2=3:扩容
compose.yaml例子:
yaml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: app_pass
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- app_network
nginx:
image: nginx:latest
container_name: web_server
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html
depends_on:
- mysql
networks:
- app_network
volumes:
mysql_data:
networks:
app_network:
driver: bridge五、Dockerfile
Dockerfile reference | Docker Docs

具体如何书写,需要结合项目实践。
