官网永远是最好的教程
安装教程
1.卸载老版本的docker
sudo apt-get remove docker docker-engine docker.io containerd runc
2.安装方法
添加仓库
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
打开docker
$ sudo systemctl start docker
验证 hello-world
image.
$ sudo docker run hello-world
如果需要使用nvidia显卡
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
常规使用
查看镜像
docker iamges
删除镜像
docker rmi <id>
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
暂停容器
docker stop <id>
删除容器
docker rm <id>
保存容器为镜像
docker commit [选项] [容器ID或容器名] [仓库名:标签]
镜像保存/载入
docker load/docker save
docker save 0fdf2b4c26d3 > hangge_server.tar
docker load < hangge_server.tar
将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
容器导入/导出
docker import/docker export
将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
docker export 8896a07bf478 > docker_che.tar
导入容器快照作为镜像
cat centos.tar | docker import - my/centos:v888
重命名镜像
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
管理磁盘空间
docker system df
查看单个image、container大小:
docker system df -v
ssh连接docker
1. 创建容器
docker run -itd --gpus=all -p <宿主端口号>:<docker映射的端口号> -p 10088:8888 --name <docker_name> <images_id>
-i 持久
-t 输出内容到终端
-d 后台运行
-name 容器名字
-p 宿主端口:容器端口
--gpus 调用显卡
docker exec -it (container id) bash
docker run -itd --gpus=all -p 10077:22 --name che_tools a022d34072bd
2.换源
# 打开配置文件
sudo vim /etc/docker/daemon.json
# 添加阿里源
{
"registry-mirrors": ["https://md4nbj2f.mirror.aliyuncs.com"]
}
#重载配置文件
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
sudo docker info
3.ssh远程连接必要软件
apt-get update
apt-get install passwd openssl openssh-server openssh-client vim
# 启动之前需手动创建/var/run/sshd,不然启动sshd的时候会报错
mkdir -p /var/run/sshd
# sshd以守护进程运行
/usr/sbin/sshd -D &
# 安装netstat,查看sshd是否监听22端口
apt-get install net-tools
netstat -apn | grep ssh
4.修改root密码
passwd
5.允许远程root登录
vim /etc/ssh/sshd_config
PubkeyAuthentication yes #启用公钥私钥配对认证方式
PermitRootLogin yes #root能使用ssh登录
port=22 #开启22端口
$ mkdir /var/run/sshd
$ echo 'root:passwd' | chpasswd
# 这里使用你自己想设置的用户名和密码,但是一定要记住!
$ sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
$ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
$ echo "export VISIBLE=now" >> /etc/profile
6.重启一下ssh服务
service ssh restart
或者
service sshd restart
或者
/etc/init.d/ssh restart
7.如果sftp无打开
安装vsftpd服务使用:yum install vsftpd
2、开机自动启动ssh命令
sudo systemctl enable ssh
3、关闭ssh开机自动启动命令
sudo systemctl disable ssh
4、单次开启ssh
sudo systemctl start ssh
5、单次关闭ssh
sudo systemctl stop ssh
6、设置好后重启系统
reboot
7、查看ssh是否启动,看到Active: active (running)即表示成功
sudo systemctl status ssh
ssh开机自启
首先我们想到的可定使用 systemctl
,一般我们如果不是用的docker 容器的话都这么干
sudo systemctl enable ssh
但是在容器中是无法这么干的,因为docker容器并没有使用systemctl
的权限
这里可以用脚本解决
vim /root/startup_run.sh
chmod +x /root/startup_run.sh
startup_run.sh
脚本内容
#!/bin/bash
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$LOGTIME] startup run..." >>/root/startup_run.log
service ssh start >>/root/startup_run.log
#service mysql start >>/root/startup_run.log
将脚本加入到启动文件中
vim /root/.bashrc
在.bashrc
末尾增加如下语句
# startup run
if [ -f /root/startup_run.sh ]; then
/root/startup_run.sh
fi
这样就能实现开机启动ssh了
注意
经多方调研,发现镜像启动时,自动执行的是~/.bashrc文件,所以,环境变量需要配置在该文件内,这样镜像启动时,可自动执行该文件,使环境变量生效。
修改容器的端口映射
修改容器配置文件
容器的配置文件存储在/var/lib/docker/container/${containerId}目录下,其中containerId是容器的Id,可以通过
docker inspect ${containerName}
查看。容器的配置分别存储在hostconfig.json和config.v2.json文件中。我们可以修改两个文件中关于端口映射的配置内容,重启Docker容器实现动态添加容器端口映射。
修改容器配置文件的方法永久有效,但需要重启容器。
普通用户使用docker
解决方法
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,liangll
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组
docker客户端连接服务器
Docker服务端配置
首先我们确认下docker的systemctl启动文件位置
[wy@localhost system]$ sudo
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-12-23 06:17:38 CST; 3 days ago
Docs: https://docs.docker.com
Main PID: 1481 (dockerd)
Tasks: 24
Memory: 546.8M
CGroup: /system.slice/docker.service
├─1481 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
└─1627 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 3000 -container-ip 172.17.0.2 -container-port 3000
......
...
[wy@localhost system]$
找到 Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)这一行, 开头文件路径就是docker服务启动的配置文件,也就是/usr/lib/systemd/system/docker.service, 当然每个系统可能都不一样, 我这里使用的是centos7
编辑这个文件sudo vim /usr/lib/systemd/system/docker.service
[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 -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
在[Service]这个标签下, 找到 ExecStart, 我们看到它有个-H fd://参数, 我们需要删除这个,修改后的值如下:
/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
修改后保存退出, 先不要重启服务, 我们还需要修改下/etc/docker/daemon.json文件,如果没有这个文件就自己建立一个, 当然每个系统的配置文件路径可能不一样,自行建立就好
在配置文件中加入hosts配置, 配置文件内容如下
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
],
"hosts":["fd://","tcp://0.0.0.0:2375"]
}
配置好后,现在我们开始重启服务
1
2
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
客户端验证
替换下面命令的IP地址为你自己服务器的地址,执行检查命令是否正常输出docker信息
1
docker -H tcp://xxx.xxx.xxx.xxx:2375 version
Docker的/var/lib/docker目录迁移
指定新的docker目录
vim /lib/systemd/system/docker.service
在ExecStart加入:
--graph=/data/docker/lib/docker
- 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker