Docker常用命令
Docker
安装
在测试或开发环境中,Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,执行这个脚本后就会自动地将一切准备工作做好,并且把 Docker 的稳定版本安装在系统中
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun启动
systemctl start docker推荐设置开机自启,执行指令:
systemctl enable docker停止
sudo systemctl stop docker配置源
DockerHub:https://hub.docker.com
阿里云
【产品变更】ACR镜像加速器功能调整公告
更新时间:2024-06-25 17:43:21
为进一步规范镜像加速器工具的使用,容器镜像服务ACR将于2024年07月02日起对镜像加速器功能进行相应的调整。
变更内容
调整镜像加速器功能的使用范围:
- 仅限阿里云用户通过支持公网访问的阿里云产品上使用该镜像加速能力。
- 仅支持通过镜像加速器拉取限定范围内的容器镜像。
https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
EOF输入这个命令并按下回车键后,在下一行直接输入
EOF(不带引号,独占一行),然后再次按下回车键。此时shell会识别到Here Document结束,并执行tee命令将JSON配置内容写入到/etc/docker/daemon.json文件中
重启
sudo systemctl daemon-reload
sudo systemctl restart docker镜像
搜索镜像
docker search mysql
安装镜像
docker pull mysql:5.7.19镜像名要小写
查看安装的镜像
docker images[root@MiWiFi-CR8808-srv docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.19 3e3878acd190 6 years ago 412MB删除镜像
docker image rm mysql:5.7.19若是不指定版本,则默认删除的是最新版本
删除的镜像正在运行中,无法删除镜像,此时需要强制执行删除:
docker image rm -f jdk8-psms该指令会将镜像和通过该镜像执行的容器全部删除,谨慎使用。
容器
创建容器
docker run -itd --name mysql-psms -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.19docker run --name de-test1 de-test
查看容器
docker ps -a该参数会将运行和非运行的容器全部列举出来。
-q参数将只查询正在运行的容器 id:
docker ps -q若是组合使用,则查询运行和非运行的所有容器 id
docker ps -qa启动容器
docker start mysql-psms重启容器
docker restart mysql-psms停止容器
docker stop mysql-psms杀死容器
docker kill mysql-psms
可能会导致数据丢失或不完整删除容器
docker rm mysql-psms进入容器
docker exec -it mysql-psms /bin/bashdocker exec -it mysql-psms bash进入容器的mysql
docker exec -it mysql-psms mysql -u root -p退出
exitDocker-容器互联
创建一个网络
docker network create net-psms查看网络列表
docker network ls查看网络详细信息
docker network inspect psms创建容器时加入网络
docker run -itd --name springboot-psms -p 8080:8080 --network psms jdk8-psms创建容器后加入网络
docker network connect psms mysql-psmsDocker-数据卷-数据挂载
docker run -d --name nginx-test -p 80:80 -v html:/usr/share/nginx/html nginx数据卷不存在回自动创建
宿主机位置为 /var/lib/docker/volumes
查看数据卷列表
docker volume ls数据卷详细信息
docker volume inspect html# docker volume inspect html
[
{
"CreatedAt": "2023-11-25T23:32:47+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "html",
"Options": null,
"Scope": "local"
}
]查看容器的数据卷情况
nginx-test
docker inspect nginx-test[
{
...
"Mounts": [
{
"Type": "volume",
"Name": "html",
"Source": "/var/lib/docker/volumes/html/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
...
]
}
]mysql-psms
docker inspect mysql-psms[
...
"Mounts": [
{
"Type": "volume",
"Name": "846ca1aa6a69b691247ebe07ced63e2bf4172e86aa44ebefe6ef1156495a7ef2",
"Source": "/var/lib/docker/volumes/846ca1aa6a69b691247ebe07ced63e2bf4172e86aa44ebefe6ef1156495a7ef2/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
...
]846ca1aa6a69b691247ebe07ced63e2bf4172e86aa44ebefe6ef1156495a7ef2是容器未指定时自动创建的匿名卷
mysql-psms2
docker inspect mysql-psms2"Mounts": [
{
"Type": "bind",
"Source": "/docker/mysql/config/my.cnf",
"Destination": "/etc/mysql/conf.d/my.cnf",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/docker/mysql/data",
"Destination": "/var/lib/mysql",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]数据挂载
docker run -d --name nginx-test -p 80:80 -v html:/usr/share/nginx/html nginx
-v /html:/usr/share/nginx/html nginx宿主目录:容器目录
宿主目录必须以/开头,不然会识别成数据卷
配置文件
数据库初始化脚本
保存的数据
Docker-MySQL
安装镜像
docker pull mysql:5.7.19创建容器
创建配置文件
mkdir -p /root/docker/mysql/config/
vi /root/docker/mysql/config/my.cnfdocker run -itd \
--name mysql-psms \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
--network psms \
-v /root/docker/mysql/config/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /root/docker/mysql/data:/var/lib/mysql \
mysql:5.7.19docker run:Docker 命令用于启动新容器-itd:这是三个标志的组合-i(或--interactive):使容器在运行时保持打开标准输入-t(或--tty):为容器分配一个伪终端-d(或--detach):在后台运行容器,并返回容器ID
--name mysql-psms:为新容器指定一个名称“mysql-psms”-p 3307:3306:将主机上的3307端口映射到容器的3306端口-e MYSQL_ROOT_PASSWORD=123456:设置环境变量MYSQL_ROOT_PASSWORD为“123456”-v 宿主机:容器:映射配置目录-v 宿主机:容器:映射数据目录mysql:5.7.19:指定要运行的 Docker 镜像和标签。这里选择了版本为 "5.7.19" 的 MySQL 镜像MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf 文件。
如果想要自定义配置,建议向 /etc/mysql/conf.d 目录中创建 .cnf 文件。
新建的文件可以任意起名,只要保证后缀名是 cnf 即可。新建的文件中的配置项可以覆盖 /etc/mysql/my.cnf 中的配置项。
持久化数据
在创建时挂载
Docker-JDK
打包
如果你想忽略测试失败并进行打包,可以使用特定的Maven命令来跳过测试。具体的命令如下:
mvn clean
mvn package -Dmaven.test.skip=true使用上述命令,Maven会跳过测试执行,并继续进行打包操作。请注意,这将会忽略所有的测试,包括单元测试和集成测试。因此,请谨慎使用此命令,确保在生产环境中不会对代码的正确性产生影响。
制作镜像
镜像配置文件
Dockerfile
# 基础镜像
# FROM openjdk:11.0-jre-buster
FROM openjdk:8-jre
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 配置阿里云软件源
RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib\n\
deb http://mirrors.aliyun.com/debian-security buster/updates main\n\
deb-src http://mirrors.aliyun.com/debian-security buster/updates main\n\
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" > /etc/apt/sources.list
# 安装ping命令
# openjdk:8-jre是一个基于Debian的镜像
# RUN yum install -y iputils
RUN apt-get update && apt-get install -y iputils-ping && apt-get clean
# 拷贝jar包
COPY Poor-Student-Information-Management-System-0.0.1-SNAPSHOT.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]构建镜像
Dockerfile和Poor-Student-Information-Management-System-0.0.1-SNAPSHOT.jar在同一目录下
mkdir ~/demo
cd ~/demodocker build -t jdk8-psms ..表示当前目录
创建容器
docker run -itd --name springboot-psms -p 8080:8080 --network psms jdk8-psms查看容器日志
docker logs -f springboot-psmsDocker-Nginx
安装
docker pull nginx配置文件
~/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/json;
sendfile on;
keepalive_timeout 65;
server {
listen 18080;
# 指定前端项目所在的位置
location / {
root /usr/share/nginx/html/PoorStudentInformationManagementSystem;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /v1 {
# rewrite /api/(.*) /$1 break;
# springboot-psms为容器名
proxy_pass http://springboot-psms:8080/v1;
}
}
}worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
#server_name 127.0.0.1;
root /usr/local/nginx/html/webstatic-extractor/webstatic-extractor;
index index.html;
#反向代理配置
location /v1 {
proxy_pass http://127.0.0.1:8083/v1;
}
location / {
rewrite ^/$ /index.html permanent;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}准备好配置文件和静态资源
静态资源放在~/nginx/html目录下
创建容器
docker run -itd \
--name nginx-psms \
-p 18080:18080 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network psms \
nginxDocker-Compose
docker inspect q18qk0h0xviyng配置文件
先创建./mysql/conf/my.cnf文件
./nginx/nginx.conf文件
docker-compose.yml
version: "3.3"
# 服务
services:
mysql:
image: mysql:5.7.19
container_name: mysql-psms
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
# 相对路径
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- net-psms
springboot-psms:
build:
context: .
dockerfile: Dockerfile
# 当前目录下的Dockerfile文件
container_name: springboot-psms
ports:
- "8080:8080"
networks:
- net-psms
# 依赖,会先创建
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx-psms
ports:
- "18080:18080"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- springboot-psms
networks:
- net-psms
networks:
net-psms:
name: net-psms启动
docker compose up -d确保mysql/data下没有文件
停止
docker compose down查看端口
sudo yum install net-tools
netstat -tuln | grep 3306绝对路径
version: "3.3"
# 服务
services:
mysql:
image: mysql:5.7.19
container_name: mysql-psms
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
# 相对路径
- "/root/mysql/conf:/etc/mysql/conf.d"
- "/root/mysql/data:/var/lib/mysql"
- "/root/mysql/init:/docker-entrypoint-initdb.d"
networks:
- net-psms
springboot-psms:
build:
context: /root
dockerfile: Dockerfile
# 当前目录下的Dockerfile文件
container_name: springboot-psms
ports:
- "8080:8080"
networks:
- net-psms
# 依赖,会先创建
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx-psms
ports:
- "18080:18080"
volumes:
- "/root/nginx/nginx.conf:/etc/nginx/nginx.conf"
- "/root/nginx/html:/usr/share/nginx/html"
depends_on:
- springboot-psms
networks:
- net-psms
networks:
net-psms:
name: net-psmsdocker rm -f mysql-psms nginx-psms springboot-psms
docker logs mysql-psms
docker logs springboot-psms
docker ps -aDROP DATABASE IF EXISTS db_ssm;
CREATE DATABASE IF NOT EXISTS db_ssm DEFAULT CHARACTER SET utf8;
USE db_ssm;[root@MiWiFi-CR8808-srv ~]# docker compose up -d
[+] Running 19/19
✔ nginx 6 layers [⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 9.8s
✔ a2abf6c4d29d Pull complete 3.0s
✔ a9edb18cadd1 Pull complete 2.9s
✔ 589b7251471a Pull complete 0.7s
✔ 186b1aaa4aa6 Pull complete 1.6s
✔ b4df32aa5a72 Pull complete 2.4s
✔ a0bcbecc962e Pull complete 3.1s
✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 41.7s
✔ 85b1f47fba49 Pull complete 4.6s
✔ 27dc53f13a11 Pull complete 0.7s
✔ 095c8ae4182d Pull complete 1.2s
✔ 0972f6b9a7de Pull complete 1.7s
✔ 1b199048e1da Pull complete 4.4s
✔ 159de3cf101e Pull complete 2.5s
✔ 963d934c2fcd Pull complete 3.2s
✔ f4b66a97a0d0 Pull complete 21.2s
✔ f34057997f40 Pull complete 5.4s
✔ ca1db9a06aa4 Pull complete 5.5s
✔ 0f913cb2cc0c Pull complete 6.1s
[+] Building 42.0s (10/10) FINISHED docker:default
=> [springboot-psms internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.12kB 0.0s
=> [springboot-psms internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [springboot-psms internal] load metadata for docker.io/library/openjdk:8-jre 16.5s
=> [springboot-psms 1/5] FROM docker.io/library/openjdk:8-jre@sha256:c0ab1c0631266ef9420a414726a790733a2561efc5f4fa 17.1s
=> => resolve docker.io/library/openjdk:8-jre@sha256:c0ab1c0631266ef9420a414726a790733a2561efc5f4fa2f9b8186f4d6b00d5 0.0s
=> => sha256:26ac3f63d29f23ef46e82e424b14a60cdc2e52b8de2b85e9acf109af1dd9dd2f 7.43kB / 7.43kB 0.0s
=> => sha256:0e29546d541cdbd309281d21a73a9d1db78665c1b95b74f32b009e0b77a6e1e3 54.92MB / 54.92MB 3.7s
=> => sha256:cb5b7ae361722f070eca53f35823ed21baa85d61d5d95cd5a95ab53d740cdd56 10.87MB / 10.87MB 7.3s
=> => sha256:c0ab1c0631266ef9420a414726a790733a2561efc5f4fa2f9b8186f4d6b00d53 1.29kB / 1.29kB 0.0s
=> => sha256:c9c3dcdb05062980d369c2126535266ada3120d4af35cfc50ff1ecbb63eb25c1 1.58kB / 1.58kB 0.0s
=> => sha256:9b829c73b52b92b97d5c07a54fb0f3e921995a296c714b53a32ae67d19231fcd 5.15MB / 5.15MB 4.6s
=> => extracting sha256:0e29546d541cdbd309281d21a73a9d1db78665c1b95b74f32b009e0b77a6e1e3 5.4s
=> => sha256:99ce012bef046180a22ef3146fac08398ed1fec48c7b1609b9aed1801e42dfce 5.65MB / 5.65MB 4.3s
=> => sha256:22dc2a72d098601f2b48898ff5e748c316037366c46e554b830cb90ad15519ba 213B / 213B 4.8s
=> => sha256:9c69a57e10d955041a2cb3ad37236bedbd7ad473dc42d5fa3d88f648affa3a12 41.37MB / 41.37MB 15.3s
=> => extracting sha256:9b829c73b52b92b97d5c07a54fb0f3e921995a296c714b53a32ae67d19231fcd 0.5s
=> => extracting sha256:cb5b7ae361722f070eca53f35823ed21baa85d61d5d95cd5a95ab53d740cdd56 0.6s
=> => extracting sha256:99ce012bef046180a22ef3146fac08398ed1fec48c7b1609b9aed1801e42dfce 0.4s
=> => extracting sha256:22dc2a72d098601f2b48898ff5e748c316037366c46e554b830cb90ad15519ba 0.0s
=> => extracting sha256:9c69a57e10d955041a2cb3ad37236bedbd7ad473dc42d5fa3d88f648affa3a12 1.6s
=> [springboot-psms internal] load build context 0.2s
=> => transferring context: 32.76MB 0.2s
=> [springboot-psms 2/5] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/t 1.3s
=> [springboot-psms 3/5] RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib\ndeb-src http: 0.4s
=> [springboot-psms 4/5] RUN apt-get update && apt-get install -y iputils-ping && apt-get clean 6.1s
=> [springboot-psms 5/5] COPY Poor-Student-Information-Management-System-0.0.1-SNAPSHOT.jar /app.jar 0.3s
=> [springboot-psms] exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:76b4bf32878c9420678bdaeda3b992db9b389aaa75354ef7a8d2baa9122f0393 0.0s
=> => naming to docker.io/library/root-springboot-psms 0.0s
[+] Running 4/4
✔ Network net-psms Created 0.2s
✔ Container mysql-psms Started 0.0s
✔ Container springboot-psms Started 0.0s
✔ Container nginx-psms StartedDocker-Portainer
Docker可视化管理工具
docker search 6053537/portainer-ce
docker pull 6053537/portainer-cedocker run -d \
--name=portainer-zh \
-p 9100:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
6053537/portainer-cedocker-compose.yml
version: '3'
services:
portainer:
image: 6053537/portainer-ce
container_name: portainer-zh
restart: always
ports:
- "9100:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock快速创建并启动容器:
docker compose up -d
docker-compose up -d在Docker 20.10版及以上,Docker团队将
docker-compose命令整合到了Docker CLI中,所以现在可以直接使用docker compose命令