Docker&Containerd常用命令

1、docker安装
CentOS中安装
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r #查看可以安装的版本
yum install -y docker-ce-18.03.1.ce-1.el7.centos #或使用yum install -y docker-ce命令安装,不推荐
启动docker服务
systemctl start docker.service
Ubuntu中安装
#一键安装

apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && apt-get update && sudo apt-get install -y docker-ce

#查看可安装的版本(中间列为docker版本号)
apt-cache madison docker-ce
#安装指定版本
apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
apt-get install docker-ce=5:20.10.9~3-0~ubuntu-bionic
#启动docker服务
systemctl start docker.service

2、docker镜像操作常用命令
登陆到本地docker仓库
docker login -u[user] -p[password] localhost:8080
登出
docker logout localhost:8080
打包系统(--exclude:排除指定目录,两条命令二选一,注意第二条命令后面有个点)
tar -cvpf /tmp/centos6-base.tar --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot /
tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
导入打包好的系统到docker镜像(注意docker镜像名不能有大写字母)
cat centos6-base.tar | docker import - centos6-base
docker import centos6-base.tar centos6-base
启动导入的docker镜像,-d表示放到后台运行,--net指定网络类型(bridge|host|none|container:NAME/ID|user_defined_network)
docker run -p 80:80 -p 443:443 -p 2022:22 --hostname CentOS6 --net=bridge -it -d centos6-base /bin/bash
提交一个运行中的容器为镜像(-p :在commit时,将容器暂停)
docker commit -p [CONTAINER ID] [REPOSITORY[:TAG]]
导出镜像到本地
docker save -o /root/centos610_ssh.tar centos:6.10_ssh
导入本地镜像
docker load </root/centos610_ssh.tar
运行镜像添加端口映射和修改网络模式(--name:指定容器名称)
docker run -p 8080:80 --hostname=test --net=bridge --name=[NAMES] -it -d [REPOSITORY[:TAG]] /bin/bash
查看docker镜像
docker images
删除docker镜像
docker image rm -f centos6-base
docker rmi centos:6.10_ssh
搜索docker镜像
docker search centos7
下载docker镜像
docker pull ansible/centos7-ansible
检查网络配置
docker network inspect bridge
拷贝宿主机文件到容器
sudo docker cp my.sh c3646071ecd2:/opt/my.sh
拷贝容器中的文件到宿主机
sudo docker cp c3646071ecd2:/opt/my.sh ./my.sh

3、docker容器操作常用命令
运行一个容器(-d:后台运行容器;--privileged:使container内的root拥有真正的root权限)
docker container run -d --privileged -it [镜像名称] /sbin/init
启动一个退出状态中的docker容器
docker container start [CONTAINER ID]
停止一个运行中的docker容器
docker container stop [CONTAINER ID]
进入启动好的docker容器
docker exec -it [CONTAINER ID] bash
强制删除运行中的docker容器
docker container rm -f [CONTAINER ID]
查看运行中的docker容器
docker ps
查看所有docker容器
docker ps -a
修改容器名称
docker container rename [NAMES] [NEW_NAMES]
容器默认配置文件目录(489a4ec81e86前十二位为容器container id)
cd /var/lib/docker/containers/489a4ec81e869cade7fb1bd887f51f72727606ea2602292f98e10fd2fb80985b/
查看多个容器运行状态
docker stats [NAMES] [NAMES]

4、运行中的docker容器增加端口映射
iptables -A DOCKER ! -i docker0 -o docker0 -p tcp -s 0.0.0.0/0 -d 172.17.0.2 --dport 65510 -j ACCEPT
iptables -t nat -A DOCKER ! -i docker0 -p tcp --dport 65510-j DNAT --to-destination 172.17.0.2:65510
iptables -t nat -A POSTROUTING -p tcp --dport 65510 -j MASQUERADE
iptables -nvL
iptables -t nat -nvL
查看container端口映射(使用iptables开启的端口映射无法查看)
docker container port [CONTAINER] 80/tcp
docker port [CONTAINER] 80/tcp

5、docker的五种网络模式
--net=bridge|host|none|container:container_id/container_name|user_defined_network   #指定容器网络模式;
--net=bridge   #默认模式。为容器创建独立的网络命名空间,分配网卡、IP地址等网络配置,并通过veth接口对,将容器挂载到一个虚拟网桥(默认为docker0)上,类似于VMware的NAT模式;
--net=host    #不为容器创建独立的网络命名空间,容器内看到的网络配置(网卡信息、路由表、Iptables规则等)均与主机上保持一致。注意其他资源还是与主机隔离的,类似于VMware的桥接模式;
--net=none    #为容器创建独立的网络命名空间,但不进行网络配置,即容器内没有创建网卡、IP地址等;
--net=container:container_id/container_name    #新创建的容器共享指定的已存在容器的网络命名空间,两个容器内的网络配置共享,但其他资源(进程空间、文件系统等)还是相互隔离的;
--net=user_defined_network    #用户自行用network相关命令创建一个网络,同一个网络内的容器彼此可见,可以采用更多类型的网络插件。

6、修改容器配置文件
docker container stop fb7c338a6c93
systemctl stop docker.service
cd /var/lib/docker/containers/fb7c338a6c934359aff9936e32ebb69bf46dd7f64e1e7892a7340367850e7e0b
vim hostconfig.json
vim config.v2.json
systemctl start docker.service
docker ps -a
docker container start fb7c338a6c93
注意:
       修改容器配置文件前必需先停容器再停docker服务再修改容器配置文件,更改端口映射和网络模式,hostconfig.json文件和config.v2.json文件都需要修改。启动docker服务后使用docker ps -a命令查看不到修改完配置文件的容器时,请检查配置文件是否修改正确

7、创建容器启动脚本
[root@test /]# vim /bin/start.sh   #进入容器里创建start.sh脚本

#!/bin/bash

/etc/init.d/sshd start
/bin/bash    #保留一个终端,防止容器自动退出

[root@test /]# chmod +x /bin/start.sh

8、docker容器使用systemctl命令报错
root@nginx:~# systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
使用以下命令运行容器

docker run --cpus 2 -m 2g -p 22:22 -p 5000:5000 --add-host=nginx:192.168.1.2 --add-host=mysql:192.168.1.3 -v /sites:/var/www/html --restart=always --privileged --name flask --hostname centos8 --net=bridge -it -d  centos8:1.0.0 /usr/sbin/init

参数说明:
     --cpus           指定可以使用cpu的核数
     -m                 指定可以使用的内存大小
     -p                  指定映射端口
     --add-host     添加hosts解析
     -v                  映射主机目录到容器目录
     --restart        重启主机自动启动容器
     --privileged   使容器有root权限需要和/usr/sbin/init配合使用
     --name         指定容器名称
     --hostname  指定容器主机名
     --net             指定网络类型

9、docker、ctr、crictl命令对比

命令 docker ctr(containerd) crictl(kubernetes)
查看运行的容器 docker ps ctr task ls/ctr container ls crictl ps
查看镜像 docker images ctr image ls crictl images
查看容器日志 docker logs crictl logs
查看容器数据信息 docker inspect ctr container info crictl inspect
查看容器资源 docker stats

ctr task metrics [TASK]
(获取容器的内存、CPU和PID的限额与使用量)

crictl stats
启动/关闭已有容器 docker start/stop

ctr task kill [TASK] (关闭)
ctr task rm [TASK] (删除)
ctr task start --log-uri /var/log/xxx.log -d [CONTAINER] (启动)

crictl start/stop
运行一个新的容器 docker run

ctr run -d --log-uri /var/log/xxx.log --net-host [IMAGE] [CONTAINER]
(--log-uri指定容器日志文件路径,-d后台运行)

无(最小单元为pod)
修改镜像标签 docker tag ctr image tag
创建一个新的容器 docker create ctr container create crictl create
导入镜像 docker load ctr image import
导出镜像 docker save ctr image export
删除容器 docker rm ctr container rm crictl rm
删除镜像 docker rmi ctr image rm crictl rmi
拉取镜像 docker pull ctr image pull ctictl pull
推送镜像 docker push ctr image push
进入容器内 docker exec

ctr task exec --exec-id 0 -t [TASK] sh
(必须要指定--exec-id,这个id可以随便写,只要唯一就行)

crictl exec

参考链接:
      https://docs.docker.com/reference/
      https://www.cnblogs.com/fps2tao/p/10557257.html   #修改运行中的docker容器的端口映射
      https://www.cnblogs.com/kingsonfu/p/11578073.html   #docker容器添加对外映射端口
      https://blog.csdn.net/weixin_42498981/article/details/112110445   #docker常用命令
      https://www.cnblogs.com/maohai-kdg/p/13474024.html    #docker安装
      https://hub-stage.docker.com/_/centos?tab=tags&page=2&ordering=last_updated  #CentOS docker镜像
      https://www.cnblogs.com/zoujiaojiao/p/17021724.html    #nsenter命令进入容器网络命名空间
      https://blog.csdn.net/qq_35745940/article/details/119900634    #nsenter命令进入容器网络命名空间
      https://www.cnblogs.com/lifuqiang/articles/16815740.html      #  安装containerd
      https://www.akiraka.net/kubernetes/1139.html#18     #docker、ctr、crictl命令对比
      https://www.cnblogs.com/hukey/p/17282408.html    # ctr命令使用说明
      https://icloudnative.io/posts/getting-started-with-containerd/      # Containerd使用教程

posted @ 2021-05-26 16:05  風£飛  阅读(196)  评论(0编辑  收藏  举报