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/