安装

推荐使用官方的脚本 :

curl -sSL https://get.daocloud.io/docker | sh 

适用于 Ubuntu, Debian, CentOS 等大部分 Linux 系统,会 3 小时同步一次官方资源。

Ubuntu18.04 可以直接使用以下指令:

sudo apt install docker.io

openSUSE 安装脚本:

#!/bin/sh

sudo zypper -n in docker
sudo systemctl start docker
sudo systemctl enable docker
sudo gpasswd -a "${USER}" docker

离线安装

  1. 准备 docker离线安装包

    可以在官方离线包下载地址里面下载。

  2. 准备 docker.service 系统配置文件

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    #TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    # restart the docker process if it exits prematurely
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
  3. 准备安装脚本

    #!/bin/sh
    echo '解压tar包...'
    tar -xvf $1
    
    echo '将 docker 目录移到 /usr/bin 目录下...'
    cp docker/* /usr/bin/
    
    echo '将 docker.service 移到 /etc/systemd/system/ 目录...'
    cp docker.service /etc/systemd/system/
    
    echo '添加文件权限...'
    chmod +x /etc/systemd/system/docker.service
    
    echo '重新加载配置文件...'
    systemctl daemon-reload
    
    echo '启动docker...'
    systemctl start docker
    
    echo '设置开机自启...'
    systemctl enable docker.service
    
    echo 'docker安装成功...'
    docker -v
  4. 卸载脚本

    #!/bin/sh
    
    echo '删除docker.service...'
    rm -f /etc/systemd/system/docker.service
    
    echo '删除docker文件...'
    rm -rf /usr/bin/docker*
    
    echo '重新加载配置文件'
    systemctl daemon-reload
    
    echo '卸载成功...'
  5. 执行脚本

    # 这里的 docker-file 是第一步下载的离线安装包
    sudo ./install.sh <docker-file>

Reference: https://www.jianshu.com/p/64a470628e49

换源

国内的镜像源

  • docker官方中国区 https://registry.docker-cn.com
  • 网易 http://hub-mirror.c.163.com
  • USTC http://docker.mirrors.ustc.edu.cn
  • 阿里云 http://<你的ID>.mirror.aliyuncs.com

阿里源需要自己去获取 id ,获取地址为 https://cr.console.aliyun.com/cn-qingdao/mirrors

左边找镜像加速即可。

方法

常用的方法是编辑 /etc/docker/daemon.json 这个文件。如果不存在的话创建一个即可。

// 输入下面的内容即可
    {
      "registry-mirrors" : [
        "http://docker.mirrors.ustc.edu.cn"
      ]
    }

换完源后记得重启 docker

sudo systemctl daemon-reload
sudo systemctl restart docker.service

常用命令

启动容器

docker run

# 交互式启动,并以 bash 作为 shell
sudo docker run -it <image_name> /bin/bash
# 后台启动
sudo docker run -d -it <image_name>
这里的 image_name 要包含 image 的 tag 。比如 node:12.17.0 。缺省的话会使用 latest 标签。

docker start

sudo docker start <option> <container_name>
docker start 是启动一个已创建的容器,run 则是创建一个新容器并启动。

查看容器

sudo docker ps
# 如果要查看未启动的 container 则可以加上 -a 参数
sudo docker ps -a

进入容器

# 进入正在运行的容器并启动 bash
sudo docker exec -it <id/container_name>  /bin/bash

如果要使用不同用户可以加上 --user 参数

# 以输入的 username 身份登录
sudo docker exec -it --user <username> <container-id> /bin/bash

退出容器且不关闭

如果进入到容器内想要退出,直接使用 exit 的话会让容器变为 exited 状态,即使后台有进程在执行。这时候可以使用 ctrl + P + Q 来进行退出,这样的话 docker 不会关闭容器。

注意如果没有前台进程的话,容器一样会退出。这是容器的运行机制导致的。

docker 与宿主机之间拷贝文件

# 拷贝容器中的文件到宿主机
sudo docker cp CONTAINER_NAME:/path/to/file/in/docker /path/to/file
# 拷贝宿主机中的文件到容器
sudo docker cp /path/to/file CONTAINER_NAME:/path/to/file/in/docker
注意无论容器有没有启动,这个拷贝命令都会生效。
最后修改:2021 年 05 月 24 日
如果觉得我的文章对你有用,请随意赞赏