一、基本命令

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
2024-03-18T07:21:38.png
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
2024-03-18T08:09:48.png

2.host模式
不会虚拟一个network命名空间,会使用容器的ip和端口
2024-03-18T08:51:35.png
执行以下命令
docker run -d --name nginx-host --network=host nginx:latest (不需要映射旧可以访问咯)
docker exec -it f07a413a1cc5 ip link show
2024-03-18T08:19:23.png
2024-03-18T08:19:39.png
2024-03-18T08:24:50.png

3.container模式
共用另外一个容器的network,采用lo回还与另外一个容器通信
2024-03-18T08:51:25.png
命令格式是 --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容器
2024-03-18T08:49:56.png
没开共享的centos容器
2024-03-18T08:50:50.png

默认情况下,不同容器间是可以ping通的
2024-03-18T08:59:50.png

三、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"

2024-04-16T09:16:29.png

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不支持

最后修改:2024 年 08 月 13 日
如果觉得我的文章对你有用,请随意赞赏