docker使用

本文档详细介绍了如何在CentOS7上安装Docker,包括更换yum源、下载与启动Docker。接着,讲解了Docker的基本操作,如下载镜像、查看镜像、创建并启动容器,以及如何通过attach、nsenter和exec方式进入容器进行交互。最后,提到了不同方式进入容器后的退出行为及其影响。
摘要由CSDN通过智能技术生成

全文参考赵班长博客 docker与k8s

第一部分 安装docker环境
  • 基础
    在电脑上安装VMware并安装centos7
  • 换yum源
    因为centos的yum源是国外的镜像仓库,一般多比较慢,或者连不上,所以将yum源换成国内阿里的(或者其他)。参考:阿里官方切换Yum源教程
    如果切换yum源之后还是不能通过yum下载(比如一值ERROR12,ERROR14),那可能是网络问题,换成自己手机热点或者其他的网络试试(有时候网络问题虽然可以ping通mirrors.aliyun.com但还是yum安装出现问题,作者本人的血泪经历)
  • 安装yum源
[root@linux-node1 ~]# cd /etc/yum.repos.d/
[root@linux-node1 yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 下载docker
yum install docker-ce

docker分企业版(EE)和社区版(CE),社区版免费,企业版收钱,两个版本更新速度不一样。

  • 启动docker
systemctl start docker
第二部分 docker的创建和启动
  1. 下载镜像
docker pull centos

对网速有些要求,如果被中断,重新执行pull即可。镜像和容器的关系就像程序和进程的关系,运行的镜像即是容器。
查看系统有哪些镜像

docker image
  1. 创建容器并启动
    docker run:创建的容器在前台执行
docker run centos<镜像名称> /bin/echo 'HE' <要在容器执行的指令>

指定容器名称

[root@linux-node1 ~]#docker run --name mydocker -it centos /bin/bash
[root@1b0cae722fa0 /]#

让容器后台运行

 [root@linux-node1 ~]# docker run -d --name mydocker2 centos /bin/bash

容器已经创建但是未启动

[root@linux-node2 maiyp]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
20273b3451bf        centos              "/bin/bash"              9 hours ago         Exited (0) 3 seconds ago                       mypdocker
[root@linux-node2 maiyp]# docker start mypdocker
mypdocker
[root@linux-node2 maiyp]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
20273b3451bf        centos              "/bin/bash"              9 hours ago         Up 19 seconds                                mypdocker
  1. 进入容器
    attach
    进入容器时,如果多个终端同时attach到同一个容器,所有的终端都会同步显示
docker attach mydocker

nsenter
使用nsenter可以访问另一个进程的名字空间
先获取容器的第一个进程的PID,然后通过PID进入容器

PID=$( docker inspect --format "{{ .State.Pid }}" <容器名或ID>) )
#如果容器没有启动,PID为0
nsenter --target $PID --mount --uts --ipc --net --pid
  1. 通过脚本进入容器
[root@linux-node2 maiyp]# cat docker_in.sh 
#!/bin/bash

docker_in(){
docker_nm=$1
docker_pid=$( docker inspect --format "{{ .State.Pid }}" $docker_nm)
if [ $docker_pid -eq 0 ]
then
	echo "the docker is not starting!"
	exit -1
fi
nsenter --target $docker_pid --mount --uts --ipc --net --pid
}
docker_in $1
[root@linux-node2 maiyp]# ./docker_in.sh mypdocker
[root@20273b3451bf /]# 
#主机名为容器ID前几位
  1. 通过exec进入容器
[root@linux-node1 ~]# docker exec mydocker whoami
root
#不进入容器执行命令
[root@linux-node2 maiyp]# docker exec -it mypdocker /bin/bash
[root@20273b3451bf /]# 
#进入容器执行命令

使用docker exec、nsenter进入容器后,执行exit退出容器,容器并不会关闭。但是使用docker attach进入容器,输入exit退出容器后,容器也会自动终止。因为除了attach,nsenter和exec实际中都是开了一个新的shell在执行。而attach是使用容器本身启动的/bin/bash,这个shell环境退出了。那么容器就自动退出了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值