docker基本操作-常见问题

75 阅读4分钟

docker相关

docker在线

apt-get install docker.io

docker离线安装步骤

  • 这里用到的版本是:docker 20.10.12,需要三个deb类型文件。

    dpkg -i docler-ce-cli_20.10.12_3-0_ubuntu-bionic_amd64.deb
    dpkg -i containerd.io_1.4.12-1_amd64.deb
    dpkg -i docler-ce_20.10.12_3-0_ubuntu-bionic_amd64.deb
    
  • 查看是否安装成功

    docker -v
    Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1
    

docker导入导出镜像

#将容器保存为镜像文件
docker commit 容器名称 保存的镜像名称
#
docker commit postgres mypostgres
#将镜像打包成tar包
docker save -o tar包名称 镜像名称
#
docker save -o postgresql.tar mypostgres
#将打包好的tar包文件生成镜像
docker load -i tar包名称
#
docker load -i postgresql.tar
#运行镜像
docker run -d --name postgres --restart=always -e POSTGRES_POSSWARD=postgres -p 5432:5432 -v /data/postgesql:/data mypostgres:latest
#redis运行命令
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /opt/myredis/redis.conf:/etc/redis/redis.conf  -v /opt/myredis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass Admin@123
#nginx运行
docker run -di --name=nginx -p 80:80 nginx

docker常用命令

  1. 查看版本

    docker -v
    
  2. 启动、停止、查看状态

    systemctl start docker
    systemctl stop docker
    systemctl status docker
    
  3. 设置开启自启动

    systemctl enable docker
    

镜像常用命令

  1. 查看镜像

    docker images
    
    • REPOSITORY:镜像名称
    • TAG:镜像标签
    • IMAGE ID:镜像ID
    • CREATED:镜像的创建日期
    • SIZe:镜像大小

    这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

  2. 搜索镜像

    docker search 镜像名
    docker search postgres
    
    • NAME:仓库名称
    • DESCRIPTION:镜像描述
    • STARTS:用户评价,反应一个镜像的受欢迎程度
    • OFFICIAL:是否官方
    • AUTO
  3. 拉取镜像

    docker pull 镜像名称:版本
    docker pull postgres:12.0
    
  4. 删除镜像

    docker rmi 镜像ID / 镜像名称
    

    删除所有镜像

    docker rmi `docker images -q`
    

容器相关命令

  1. 查看容器

    查看正在运行的容器

    docker ps
    

    查看所有容器

    docker ps -a
    

    查看最后一次运行的容器

    docker ps -l
    

    查看所有停止的容器

    docker ps -f status=exited
    
  2. 创建与启动容器

    创建容器常用参数说明:

    创建容器命令:

    docker run
    

    -i:表示运行容器

    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登陆进去。即分配一个伪终端。

    --name:为创建的容器命名。

    -v:表示目录映射关系(前者是宿主机目录,后者是要映射的容器目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。

    1. 交互式方式创建容器

      docker run -it --name=容器名称 镜像名称:版本号 /bin/bash
      

      退出当前容器

      exit
      
    2. 守护式方式创建容器

      docker run -d --name=容器名称 镜像名称:版本号
      
    3. 进入容器终端

      docker exec -it 容器名称 /bin/bash
      docker exec -it postgres /bin/bash
      

docker已经创建的容器添加映射端口

  1. 找到需要添加映射的容器名称

    docker ps -a
    
  2. 查看容器的端口映射情况

    docker port 容器名称
    
  3. 查找要修改容器的id

    docker inspect 容器名称 |grep id
    
  4. 停止容器,停止docker

  5. 进入 /var/lib/docker/containers目录找到与上一步操作id相同的目录,修改其中的hostconfig.json和config.v2.json文件。

    hostconfig.json文件,找到PortBindings,添加一下端口:

    "PortBindings": {
            "80/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "80"
                }
            ],
            "8001/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "8001"
                }
            ],
            "8002/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "8002"
                }
            ]
        }
    

    config.v2.json文件,找到ports,再以下添加端口:

    "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "80"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "80"
                    }
                ],
                "8001/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8001"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "8001"
                    }
                ],
                "8002/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8002"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "8002"
                    }
                ]
            }
    
  6. 重新启动docker,重新启动容器

在已创建但未挂载配置文件的容器中复制配置文件并进行修改

  1. 使用docker cp命令将容器中的配置文件复制到本地:

    docker cp 容器名称:配置文件在容器内的路径
    #示例
    docker cp postgres:/var/lib/postgresql/data/pg_hba.conf /home/
    
  2. 使用vim或者其他工具修改本地复制的配置文件

  3. 使用docker cp命令将修改后的配置文件复制回容器:

    docker cp /home/pg_hba.conf postgres:/var/lib/postgresql/data/pg_hba.conf
    
  4. 重启容器