docker使用

全文参考赵班长博客 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环境退出了。那么容器就自动退出了。

你可能感兴趣的:(Docker,docker,centos,运维)