镜像 
查看所有的镜像 
sh
docker images ls导入镜像 
sh
docker load -i image-name.tar重命名镜像 
sh
docker tag 原镜像名:标签 新镜像名:新标签进入运行中的容器 
sh
docker exec -it [containerName] bash将容器存为镜像 
sh
docker commit [containerId] [imageName]导出镜像 
sh
docker save -o image-name.tar [imageName]导出多个镜像到同一个文件 
sh
docker save -o image-name.tar [imageName1] [imageName2]...容器和主机之间拷贝文件 
sh
docker cp <container_id>:/xxx /xxx删除镜像 
sh
docker image rm [imageName]容器 
sh
docker container ls #列出本机运行的容器
docker container ls --all # 列出本机所有容器,包括终止运行的容器
docker container run hello-world  #运行完就停止
docker container run -it ubuntu bash #服务类型(需手动停止)
docker container kill [containID] #手动停止容器
docker container rm [containerID] # 删除容器,终止运行的容器文件,依然会占据硬盘空间。列出所有容器的 ID 
shell
docker ps -a -q #-a 表示列出所有容器(包括停止的),-q 表示只显示容器的 ID。停止所有容器 
shell
docker stop $(docker ps -a -q)删除所有容器 
shell
docker rm $(docker ps -a -q)删除所有镜像 
shell
docker rmi $(docker images -q)运行命令详解 
sh
docker container run
ocker container run -p 8000:3000 -it koa-demo /bin/bash
docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
docker run -it --name evaluate-ubuntu22-ios-runner -p 6206:6206 -p 8001:8001 59fe2efae52c /bin/bash
#-p参数:容器的 3000 端口映射到本机的 8000 端口。
#-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
#--rm参数:容器终止运行后自动删除容器文件。
#koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
#/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
# --network host|bridge|none 默认是bridge,即桥接网络,以桥接模式连接到宿主机;host是宿主网络,即与宿主机共用网络;none则表示无网络,容器将无法联网。当容器使用host网络时,容器与宿主共用网络,这样就能在容器中访问宿主机网络,那么容器的localhost就是宿主机的localhost。启动 ngnix 
sh
docker container run --name testnginx --volume "$PWD/html":/usr/share/nginx/html --volume "$PWD/ngnix-config/nginx":/etc/nginx -p 8887:80 -d nginx
# "$PWD/html":/usr/share/nginx/html 把当前工作路径子目录html,映射到容器的网页文件目录/usr/share/nginx/html
docker container cp mynginx:/etc/nginx .
# 把mynginx容器的/etc/nginx拷贝到当前目录。不要漏掉最后那个点。如何解决 docker 内部访问不了宿主机 
在防火墙开启的状态下,docker 容器内部无法访问宿主机服务(能够访问非宿主机的其他局域网计算机的服务),解决方法:
_补充:由于容器内请求的源地址是使用的 docker0 网段的内网地址,宿主机防火墙无法识别来源为非宿主机网段的 docker0 网段的内网地址请求,将其标记为未知来源,于是对请求进行了拦截,可通过添加防火墙来源规则(docker 容器默认内网网段为 172.17.0.0/16):
ip addr show # 查看docker0的转发网络地址和端口
sudo ufw allow from 172.17.0.0/16 #允许所有RFC1918网络(局域网/无线局域网的)访问这个主机Raspberry,内置的防火墙 ufw 设置和启用 
启用 
sh
sudo ufw enable
sudo ufw default deny
# 作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。关闭 
sh
sudo ufw disable查看状态 
sh
sudo ufw status开启/禁用相应端口或服务举例 
sh
sudo ufw allow 80 #允许外部访问80端口
sudo ufw delete allow 80 #禁止外部访问80
sudo ufw allow from 192.168.1.1 #允许此IP访问所有的本机端口
sudo ufw deny smtp #禁止外部访问smtp服务
sudo ufw delete allow smtp #删除上面建立的某条规则
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port #要拒绝所有的流量从TCP的10.0.0.0/8 到端口22的地址192.168.0.1Docker Compose 
yml
version: '3.7'
services:
  evaluate:
    container_name: my-image-runner
    image: my-image
    # network_mode: "host"
    extra_hosts:
      - 'host.docker.mysql:192.168.x.xxx'
    environment:
      - BYWL_MYSQL_USER=xxx
      - BYWL_MYSQL_PASSWORD=xxx
    volumes:
      - C:\Users\xxjw\Downloads\projectHome:/code/projectHome
      - C:\Users\xxjw\Downloads\web_dist\dist:/web/dist
    ports:
      - '6206:6206'
      - '8001:8001'
    command: /usr/local/bin/startup.sh
    #stdin_open: true  # 保持标准输入打开
    #tty: true         # 为容器分配一个伪终端yml
services:
  web:
    image: nginx
    volumes:
      - /home/deploy_home/nginx-conf:/etc/nginx
    ports:
      - '80:80'
    network_mode: 'host'
  backend:
    image: fastapi:v2.5
    volumes:
      - /home/deploy_home/backend:/Backend
    environment:
      - SQL_HOST=192.168.x.xxx
      - SQL_PORT=5237
    ports:
      - '8000:8000'yml
services:
  web:
    image: nginx-with-perl
    volumes:
      - D:\ProjectDeploy\x73_deploy\nginx-conf:/etc/nginx
    ports:
      - '7208:80'
    environment:
      - BACKEND_PORT=8000
    networks:
      - user_network
  db:
    image: mysqlx73:v1.0
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_CHARSET: 'utf8mb4'
      MYSQL_COLLATION: 'utf8mb4_unicode_ci'
    ports:
      - '3307:3306'
    networks:
      - user_network
  backend:
    image: backend:x73
    volumes:
      - D:\ProjectDeploy\x73_deploy\x73_backend:/x73_backend
    environment:
      MYSQL_HOST: 'db' # 使用服务名作为主机名
      MYSQL_USERNAME: 'root'
      MYSQL_PASSWORD: '123456'
      MYSQL_DB: 'xxx'
      MYSQL_PORT: '3306'
      DOCKER_BASE_URL: 'tcp://192.168.2.73:2376'
      REGISTRY_HOST: '192.168.2.73:5000'
      GM_HOST: 'http://192.168.2.73:8000'
    ports:
      - '10088:8000'
    networks:
      - user_network
networks:
  user_network:
    driver: bridgestart.sh
sh
#!/bin/bash
service nginx start
service mysql start
service redis-server start
cd /code/server_assess-feat-hand-over
python3 main_async.py &
ASYNC_PID=$!
python3 main.py &
MAIN_PID=$!
cleanup() {
    echo "Stopping Python services..."
    kill $ASYNC_PID $MAIN_PID
    wait $ASYNC_PID $MAIN_PID
    echo "All services stopped."
}
trap cleanup SIGTERM SIGINT
wait $ASYNC_PID $MAIN_PID启动 docker-compose 
shell
docker-compose up
#后台运行
docker-compose up -d
#启动后又容器生成,下次可以通过 docker-compose start 启动,通过stop停止停止 docker-compose 
shell
docker-compose kill两个容器网络互访 
yml
version: '3.8'
services:
  service1:
    image: your_image_1
    networks:
      - mynetwork
    ports:
      - '8080:8080'
  service2:
    image: your_image_2
    networks:
      - mynetwork
    ports:
      - '9090:9090'
networks:
  mynetwork:
    driver: bridgedocker compose service 访问另外一个 service 
yml
version: '3'
services:
  service1:
    image: your_image1
    networks:
      - custom_network
  service2:
    image: your_image2
    networks:
      - custom_network
networks:
  custom_network:
    driver: bridge在这个配置中,service1 可以通过 service2 的名称进行访问,如 http://service2