欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker安装,命令详解

程序员文章站 2024-03-25 13:34:10
...

一、环境

cat /etc/redhat-release 
uname -r

二、安装

yum install docker

卸载docker

yum remove docker-*

三、启动

#启动
systemctl start docker
#查看状态
systemctl status docker

启动报错可以看这篇文章https://www.jianshu.com/p/a62ffb13ada6
脚本安装

[aaa@qq.com ~]# vim installDocker.sh
#!/bin/bash
# install docker shell
# made by if
# 0. 关闭防火墙
echo "0.使用脚本关闭防火墙..."
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 1. 使用脚本自动安装
echo "1.使用脚本自动安装..."
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
  
# 2.启动 Docker CE
echo "2.启动 Docker CE..."
sudo systemctl enable docker
sudo systemctl start docker
# 3.测试 Docker 是否安装正确
echo "3.测试 Docker 是否安装正确..."
docker run hello-world
# 4.添加镜像加速器
echo "4.添加镜像加速器..."
echo "{ 
  "registry-mirrors": [
    "https://5ajk0rns.mirror.aliyuncs.com"
    ]
}" > /etc/docker/daemon.json
# 5.重新启动服务
echo "5.重新启动服务..."
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
[aaa@qq.com ~]#sh installDocker.sh

四、Docker基础命令

1.查看当前镜像

[aaa@qq.com ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

2.搜索镜像
执行docker search centos 会从dockerhub上搜索镜像

docker search 镜像名字

docker安装,命令详解
3.下载镜像

默认是国外的源,下载会慢,建议用国内镜像仓库

cat /etc/docker/daemon.json 
{
    "registry-mirrors": [ "https://registry.docker-cn.com"]
}
#重启docker
systemctl restart docker

下载镜像

docker pull centos #安装centos的镜像
docker pull nginx #安装nginx的镜像

4.导出镜像

docker save -o 镜像名称 镜像

[aaa@qq.com ~]# docker save -o nginx.tar nginx
[aaa@qq.com ~]# ls
anaconda-ks.cfg  nginx.tar
#需要将docker导出为tar,后面为镜像名称

5.导入镜像

docker load --input nginx.tar  #使用input导入
docker load < nginx.tar    #使用重定向导入

6.删除镜像

docker删除可以使用docker rmi 后面加上docker的ID

提示:如果镜像已经创建了一个容器,那么将无法进行删除
docker安装,命令详解

7.删除容器:

docker rm 容器名
或者使用
docker rm -f 容器名
删除所有容器
docker  rm -f `docker ps -qa

第二种会提示容器在将它关闭

8.创建启动容器

docker run 镜像

docker  container run -itd --name bs centos
#centos是镜像的名称,镜像的名称必须在选项的后面
#--name 容器的名称 
#-t 让docker分配一个伪终端
#-i 让docker的标准输入打开{input}
#-d 后台分配一个终端

docker安装,命令详解
9.查看容器

ps是显示正在运行的容器 -a是显示不运行的

[aaa@qq.com ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
1fca4596401c        centos              "/bin/bash"         About a minute ago   Up About a minute                       bs
[aaa@qq.com ~]#

启动容器

docker start bs    #容器名启动
docker start bcededa4b82c #id号启动

进入容器

docker attach bs

退出容器

ctrl+d    #关闭退出容器
ctrl+p+q  #退出不关闭容器

五、Docker管理案例

提示:生产场景是不使用docker attach进入容器的,需要我们使用nsenter这个工具,这个工具包含在util-linux软件包里面

[aaa@qq.com ~]#yum install util-linux -y 
#Centos7默认最小化已经安装

我们通过nsenter就可以进入容器,但是nsenter是通过pid进入容器里,所以我们需要知道容器的pid。我们可以通过docker inspect来获取到pid

[aaa@qq.com ~]# docker start abcdocker
abcdocker
[aaa@qq.com ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
573227eb789b        centos              "/bin/bash"         25 minutes ago      Up 1 second                             abcdocker
[aaa@qq.com ~]# docker inspect -f "{{ .State.Pid }}" abcdocker
8603
[aaa@qq.com ~]# nsenter -t 8603 -m -u -i -n -p
[aaa@qq.com /]#

docker inspect -f {{.State.Pid}}容器名或者容器id
#每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式
nsenter --target上面查到的进程id --mount --uts --ipc --net --pid #输入该命令便进入到容器中

解释nsenter指令中进程id之后的参数的含义:

* –mount参数是进去到mount namespace中 
* –uts参数是进入到uts namespace中 
* –ipc参数是进入到System V IPC namaspace中 
* –net参数是进入到network namespace中 
* –pid参数是进入到pid namespace中 
* –user参数是进入到user namespace中

更多参数我们可以通过nsenter --help进行获取

我们进入容器中查看进程
以下是以nsenter启动的进程

/bin/bash是我们运行容器产生的进程
-bash 是我们使用nsenter产生的,这样如果我们退出容器,容器就不会退出,因为-bash还在运行

因为每次进入容器都需要输入那两条命令,所以我们可以写一个脚本来获取。
脚本内容如下:

[aaa@qq.com ~]# cat docker_in.sh 
#!/bin/bash
# Use nsenter to access docker
docker_in(){
  NAME_ID=$1
  PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
  nsenter -t $PID -m -u -i -n -p
}
docker_in $1

执行结果如下

[aaa@qq.com ~]# chmod +x docker_in.sh 
[aaa@qq.com ~]# ./docker_in.sh abcdocker
[aaa@qq.com /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Oct18 ?        00:00:00 /bin/bash
root         54      0  0 00:23 ?        00:00:00 -bash
root         67     54  0 00:23 ?        00:00:00 ps -ef
[aaa@qq.com /]#

我们也可以不进入容器进行查看

[aaa@qq.com ~]# docker exec  abcdocker ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Oct18 ?        00:00:00 /bin/bash
root         85      0  0 00:28 ?        00:00:00 ps -ef
[aaa@qq.com ~]# docker exec  abcdocker ls /
anaconda-post.log
bin
dev

提示:可以使用exec参数,不进入容器查看内容

我们还可以使用exec进入docker容器中

[aaa@qq.com ~]# docker exec -it abcdocker /bin/bash

但是最好还是少使用exec,有可能会对容器造成一些意外的影响
原文 http://www.dhhblog.com/?p=539

相关标签: docker