一、基本命令
1.查找镜像
docker search keyword
2.下载镜像
docker pull name:tag
3.列出本地镜像
docker images
4.删除镜像
docker rmi name:tag
可选参数-f,强制删除
5.查看镜像
docker inspect name:tag
6.保存一个新容器
docker commit sourcecontainerId或者sourcontainerName name:tag
docker history name:tag可以查看变更历史
7.重命名
docker tag sourcename:sourcetag destname:desttag
8.运行
docker run --name 名字 -p hostport:containerport -d(后台)it(交互模式并分配一个终端) /bin/bash -v(吃就话) containerPath:hostPath command(可选)
比如 docker run --name nginx-demo -p 8080:80 -d -v /nginx:/root/nginx nginx:latest
9.查看容器
docker ps
-a查看所有的容器
-f filter筛选的意思 ,key有image name 等
比如 docker ps -a -f name=nginx
10.停止容器 删除容器
docker stop containerId或者containerName
docker rm containerId
11.执行命令
docker exec -it 容器id command
12.拉取多平台镜像
docker pull --platform=linux/arm64
二、网络原理
1.默认为网桥模式,有独立的network命名空间
yum install bridge-utils
docker daemon 守护进程会创建一个网桥,并在网桥上面开启veth*接口,实现与容器的通信,有多少容器会开多少接口
ip link show (数据链路层)
brctl show
2.host模式
不会虚拟一个network命名空间,会使用容器的ip和端口
执行以下命令
docker run -d --name nginx-host --network=host nginx:latest (不需要映射旧可以访问咯)
docker exec -it f07a413a1cc5 ip link show
3.container模式
共用另外一个容器的network,采用lo回还与另外一个容器通信
命令格式是 --network=container:xxx xxx是id或者容器名字
验证:
web1:docker run -d --name nginx-master -p 80:80 nginx:latest
centos :docker run -d --name centos-demo --network=container:nginx-master centos:latest tail -f /dev/null
开了共享的centos容器
没开共享的centos容器
默认情况下,不同容器间是可以ping通的
三、docker-compose
1.指定网络
networks:
#下面这个使用docker network ls 的网络
jenkins_docker_default:
external: true
version: "1.0"
services:
demo:
build:
context: ./
dockerfile: Dockerfile
image: demo:v1.0
container_name: demo
networks:
- jenkins_docker_default
ports:
- "80:8080"
2.使用卷
version: "3.1"
services:
jenkins:
image: jenkins/jenkins:2.440.2-lts
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/
四 COPY ADD的区别
ADD会在COPY到目标目录之后,自动解压
五 CMD RUN ENTRYPOINT的区别
RUN 是在打包过程中运行的命令,比如用来安装软件包
CMD 用于执行命令,只有最后一个CMD生效,如果docker run后面跟了参数,这个参数将会替换CMD参数
ENTRYPOINT 是用于执行命令,只有最后一个ENTRYPOINT生效,如果docker run后面跟了参数,这个参数将会替换CMD中的命令为参数
六 SHELL和EXEC
CMD executable param1 param2
CMD [“executable”, “param1”, “param2”]
SHELL支持变量传递,CMD不支持