docker基本操作

官网永远是最好的教程

安装教程

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
  1. 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值