Docker镜像和容器管理(二)

Docker安装

Docker镜像管理

https://hub.docker.com/ 是公共的一个Docker镜像仓库,类似GitHub一样,上面有非常多的开源项目镜像。

可以直接在命令行搜索镜像

[root@dns-server ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   4847                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              118                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86…   99                                      [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   65                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              47                                      [OK]
NAME 镜像名称 、DESCRIPTION 镜像说明 、 STARS 点赞数量 、 OFFICIAL 是否是官方的 、 AUTOMATED 是否是自动构建的


获取镜像,默认tag是最新的  centos:latest

[root@dns-server ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
Digest: sha256:67dad89757a55bfdfabec8abd0e22f8c7c12a1856514726470228063ed86593b
Status: Image is up to date for centos:latest

查看当前主机镜像列表

[root@dns-server ~]# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
centos                          latest              75835a67d134        2 weeks ago         200MB

 可以看到一个 CentOS镜像 才 200MB , 详细介绍  参考链接:https://blog.csdn.net/CloudMan6/article/details/71105101

导出镜像,默认tag是latest

[root@dns-server ~]# docker save -o centos.tar centos:latest
[root@dns-server ~]# ls
centos.tar

导入镜像

[root@dns-server ~]# docker load -i centos.tar 
Loaded image: centos:latest
或者
[root@dns-server ~]# docker load < centos.tar 
Loaded image: centos:latest

删除镜像,镜像创建成容器时,是不能删除的。

[root@dns-server ~]# docker rmi centos
Untagged: centos:latest
Untagged: centos@sha256:67dad89757a55bfdfabec8abd0e22f8c7c12a1856514726470228063ed86593b

 查看镜像详细信息

[root@dns-server ~]# docker image inspect system/centos

Docker容器管理

 运行容器

docker run 是启动容器的方法,启动时会在本地检测是否有镜像,没有会从公共仓库拉取。

[root@server2 ~]# docker run centos /bin/echo "Hello world"
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
aeb7866da422: Already exists 
Digest: sha256:67dad89757a55bfdfabec8abd0e22f8c7c12a1856514726470228063ed86593b
Status: Downloaded newer image for centos:latest
Hello world

容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器也就不会退出。上面的命令是 /bin/echo "Hello world" ,执行完容器就会退出。

docker run常用参数

--name  指定容器名称

-i  进入容器

-t  分配一个伪终端tty

-p  指定端口映射

-P  随机端口映射

docker run --help  查看帮助

查看容器
docker ps 查看运行中的容器 -a 查看所有容器。
[root@server2 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@server2
~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a6f19d985fd centos "/bin/echo 'Hello wo…" 2 minutes ago Exited (0) 2 minutes ago confident_hermann 5373272349bf centos "/bin/echo 'Hello wo…" 2 minutes ago Exited (0) 2 minutes ago jolly_wozniak 0560af19b61f wordpress "docker-entrypoint.s…" 2 days ago Exited (1) 2 days ago some-wordpress 89e2964c1e14 mysql:latest "docker-entrypoint.s…" 2 days ago Exited (0) 7 hours ago some-mysql

查看容器详细信息

[root@dns-server ~]# docker container inspect  myredis

停止容器

[root@dns-server ~]# docker stop  容器名称或ID

 删除容器

[root@dns-server ~]# docker rm 容器名称/ID
-f 强制删除

##删除所有容器
[root@dns-server ~]# docker rm $(docker ps -a -q)

在docker run 创建时加上--rm参数,容器退出后自动删除。

进入容器

docker attach  容器名称/ID
nsenter 进入容器
#!/bin/bash

# Use nsenter to access docker

basedir=`cd $(dirname $0); pwd -P`/$0
if [ $# -ne 1 ];then
  echo "Usage: $basedir {CONTAINER ID | CONTAINER NAMES}" && exit 2
fi


docker_in(){
  NAME_ID=$1
  PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
  nsenter -t $PID -m -u -i -n -p 
}

docker_in $1

exec进入容器

#!/bin/bash
name=$1
basedir=`cd $(dirname $0); pwd -P`/$0
if [ $# -eq 1 ];then
  docker exec -it $name /bin/bash
else
  echo "Usage: $basedir {CONTAINER ID | CONTAINER NAMES}" && exit 2
fi

Docker官方网站:https://www.docker.com/

原文地址:https://www.cnblogs.com/root0/p/9816893.html