安装
推荐使用官方的脚本 :
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
离线安装
- 准备 docker离线安装包
可以在官方离线包下载地址里面下载。
准备 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
准备安装脚本
#!/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
卸载脚本
#!/bin/sh echo '删除docker.service...' rm -f /etc/systemd/system/docker.service echo '删除docker文件...' rm -rf /usr/bin/docker* echo '重新加载配置文件' systemctl daemon-reload echo '卸载成功...'
执行脚本
# 这里的 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
注意无论容器有没有启动,这个拷贝命令都会生效。