1、帮助命令
docker version #显示docker的版本信息。 docker info #显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help #帮助命令
帮助文档的地址:https://docs.docker.com/engine/reference/commandline/docker/
2、镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替 docker search #搜索镜像 docker pull #下载镜像 docker image pull docker rmi #删除镜像 docker image rm docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 4 months ago 13.3kB # 解释 REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的ID CREATED 镜像的创建时间 SIZE 镜像的大小 # 可选项 -a, --all # 列出所有的镜像 -q, --quiet # 只显示镜像的id docker images -aq #显示所有镜像的id
docker search 搜索镜像
docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 11138 [OK] mariadb MariaDB Server is a high performing open sou… 4221 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 829 [OK] percona Percona Server is a fork of the MySQL relati… 547 [OK] phpmyadmin phpMyAdmin - A web interface for MySQL and M… 274 [OK] centos/mysql-57-centos7 MySQL 5.7 SQL database server 89 mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 88 # 可选项 --filter=STARS=3000 # 搜索出来的镜像就死starts 大于3000的 docker search mysql --filter=STARS=3000 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 11138 [OK] mariadb MariaDB Server is a high performing open sou… 4221 [OK]
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag] docker pull mysql Using default tag: latest latest: Pulling from library/mysql b4d181a07f80: Pull complete a462b60610f5: Pull complete 578fafb77ab8: Pull complete 524046006037: Pull complete d0cbe54c8855: Pull complete aa18e05cc46d: Pull complete 32ca814c833f: Pull complete 9ecc8abdb7f5: Pull complete ad042b682e0f: Pull complete 71d327c6bb78: Pull complete 165d1d10a3fa: Pull complete 2f40c47d0626: Pull complete Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 等价于 docker pull mysql docker pull docker.io/library/mysql:latest # 指定版本下载 docker pull mysql:5.7 5.7: Pulling from library/mysql b4d181a07f80: Already exists a462b60610f5: Already exists 578fafb77ab8: Already exists 524046006037: Already exists d0cbe54c8855: Already exists aa18e05cc46d: Already exists 32ca814c833f: Already exists 52645b4af634: Pull complete bca6a5b14385: Pull complete 309f36297c75: Pull complete 7d75cacde0f8: Pull complete Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7
docker rmi 删除镜像
docker rmi -f 镜像id # 删除指定的镜像 docker rmi -f 镜像id 镜像id 镜像id 镜像id # 删除多个镜像 docker rmi -f $(docker images -aq) # 删除全部的镜像
3、容器命令
docker run 镜像id #新建容器并启动 docker ps #列出所有运行的容器 docker container list docker rm 容器id #删除指定容器 docker start 容器id #启动容器 docker restart容器id #重启容器 docker stop 容器id #停止当前正在运行的容器 docker kill 容器id #强制停止当前容器 docker pause 容器id #挂起容器 docker unpause 容器id #恢复挂起 docker commit 容器id 镜像名 #把容器制作成镜像
说明:有镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos:7
新建容器并启动
docker run [可选参数] image # 参数说明 --name="Name" 容器名字 tomcat01 tomcat02, 用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器的端口 -p 8080:8080 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 容器端口 -P 随机指定端口 # 测试,启动并进入容器 docker run -it centos:7 /bin/bash [root@90262d2cbb32 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var # 从容器中退回主机 [root@90262d2cbb32 /]# exit exit
列出所有的运行的容器
#docker ps命令 #列出当前正在运行的容器 # 列出当前正在运行的容器 -a # 列出当前正在运行的容器+带出历史运行过的容器 -q # 只显示容器的编号 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a199a44bb07c centos "/bin/bash" 23 minutes ago Up 23 minutes compassionate_feynman docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90262d2cbb32 centos "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago zen_cerf a199a44bb07c centos "/bin/bash" 23 minutes ago Up 23 minutes compassionate_feynman 2a70eb3c087c d1165f221234 "/hello" 25 hours ago Exited (0) 25 hours ago bold_darwin
退出容器
exit
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除 docker rm -f $(docker ps -aq) # 删除所有的容器 docker ps -a -q | xargs docker rm -f # 删除所有的容器
启动和停止容器的操作
docker start 容器id #启动容器 docker restart 容器id #重启容器 docker stop 容器id #停止当前正在运行的容器 docker kill 容器id #强制停止当前容器
4、常用其他命令
后台启动容器
# 命令 docker run -d 镜像名! docker run -d centos:7 # 问题docker ps,发现centos停止了 # 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程, docker 发现没有应用,就会自动停止 # nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs --help Usage: docker logs [OPTIONS] CONTAINER Fetch the logs of a container Options: --details 显示更多的信息 -f, --follow 跟踪日志输出,最后一行为当前时间戳的日志 --since string 显示具体某个时间或时间段的日志 -n, --tail string 从末尾显示多少行,默认all -t, --timestamps 显示时间戳 #命令测试看日志 docker logs -f -t --details 容器id # 自己编写一段shell脚本 docker run -d centos:7 /bin/sh -c "while true;do echo 6666;sleep 1;done" #模拟日志 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES596b80f933ac centos "/bin/sh -c 'while t…" 9 seconds ago Up 8 seconds priceless_meninsky # 显示日志 -tf #显示日志 --tail=number #要显示日志条数 docker logs -tf --tail 10 596b80f933ac docker logs -tf --tail=10 596b80f933ac
查看容器中进程信息 ps
# 命令 docker top 容器id docker top 596b80f933ac UID PID PPID C STIME TTY TIME CMD root 10528 10491 0 17:17 ? 00:00:00 /bin/sh -c while true;do echo 6666;sleep 1;done root 11362 10528 0 17:23 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像的元数据
# 命令 docker inspect 容器id #测试 docker inspect 596b80f933ac
进入当前正在运行的容器 *****
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell
# 测试
docker exec -it 596b80f933ac /bin/bash
ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jul19 ? 00:00:17 /bin/sh -c while true;do echo 6666;sleep 1;done
root 23455 0 0 00:51 pts/0 00:00:00 /bin/bash
root 23704 1 0 00:55 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 23705 23455 0 00:55 pts/0 00:00:00 ps -ef
# 方式二
docker attach 容器id
# 测试
docker attach 596b80f933ac
正在执行当前的代码。。。。
# docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach #进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝到主机上
docker cp 容器id:容器内路径 目的的主机路径
docker attach 0b308ba7528d
cd /home
ls
# 在容器内新建一个文件
touch test.java
exit
# 将这个文件拷贝出来到主机上
docker cp 0b308ba7528d:/home/test.java /home
# 拷贝是一个手动过程,使用 -v 卷的技术,可以更容易实现
==============================
总结:
attach Attach to a running container #当前shell下attach连接指定运行镜像 build Build an image from a Dockerfile #通过Dockerfile定制镜像 commit Create a new image from a containers changes #提交当前容器为新的镜像 cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中 create Create a new container #创建一个新的容器,同run 但不启动容器 diff Inspect changes on a containers filesystem #查看docker容器变化 events Get real time events from the server #从docker服务获取容器实时事件 exec Run a command in a running container #在已存在的容器上运行命令 export Export a containers filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import) history Show the history of an image #展示一个镜像形成历史 images List images #列出系统当前镜像 import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export) info Display system-wide information #显示系统相关信息 inspect Return low-level information on a container or image #查看容器详细信息 kill Kill a running container #kill指定docker容器 load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save) login Register or log in to a Docker registry #注册或者登陆一个docker源服务器 logout Log out from a Docker registry #从当前Docker registry退出 logs Fetch the logs of a container #输出当前容器日志信息 pause Pause all processes within a container #暂停容器 port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口 ps List containers #列出容器列表 pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像 push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器 rename Rename a container #重命名容器 restart Restart a running container #重启运行的容器 rm Remove one or more containers #移除一个或者多个容器 rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除) run Run a command in a new container #创建一个新的容器并运行一个命令 save Save an image(s) to a tar archive #保存一个镜像为一个tar包(对应load) search Search the Docker Hub for images #在docker hub中搜索镜像 start Start one or more stopped containers #启动容器 stats Display a live stream of container(s) resource usage statistics #统计容器使用资源 stop Stop a running container #停止容器 tag Tag an image into a repository #给源中镜像打标签 top Display the running processes of a container #查看容器中运行的进程信息 unpause Unpause all processes within a container #取消暂停容器 version Show the Docker version information #查看容器版本号 wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
===================================================
练习
centos安装nginx
#1. 搜索镜像 search 建议大家去docker hub搜索,可以看到帮助文档 docker search centos #2. 拉取镜像 pull docker pull centos #3. 运行测试 # -d 后台运行 # --name 给容器命名 # -p 宿主机端口:容器内部端口 docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4cdc5dd7eaad 13 days ago 133MB centos latest 300e315adb2f 7 months ago 209MB docker run -itd --name nginx01 -p 80:80 centos 8661ad7244a0dc33bed197e3e0147843b4e5e9d9e8646e442ffb102e1d0d4ac3 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8661ad7244a0 centos "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:80->80/tcp nginx01 curl localhost # 进入容器 docker exec -it nginx01 /bin/bash #安装vim和nginx yum -y install epel-release yum -y install vim net-tools nginx #把容器制作成镜像 docker commit nginx01 mynginx