1、帮助命令
docker version #查看docker版本信息 docker info #查看docker系统信息,包括镜像和容器的数量 docker 命令 --help #通用帮助命令 docker image inspect mysql:latest | grep -i version #查看MySQL最近的版本号 docker stats #查看CPU状态 docker network ls #网络列表查询 docker network create my-network #创建新的docker网络 docker run -d --name my-container --network my-network my-image #容器连接到特定网络 docker history 镜像ID #查看镜像创建历史
2、镜像命令
(1)查看镜像
# 查看所有本地主机上的镜像 root@peksun:/# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 13 months ago 13.3kB #REPOSITORY 镜像的仓库源 #TAG 镜像的标签 #IMAGE ID 镜像的ID #CREATED 镜像的创建时间 #SIZE 镜像的大小 ** 可选项 -a, --all #列出所有镜像 -q, --quiet #只显示镜像的ID
(2)搜索镜像
# 命令:docker search 镜像名 root@peksun:/www/hyperf-skeleton# docker search mysql NAME DESCRIPTION STARS OFFICIAL mysql MySQL is a widely used, open-source relation… 15116 [OK] docker search mysql --filter=STARS=3000 #搜索STARS大于3000的 # 可选项,通过收藏来过滤 --filter=STARS=3000
(3)下载镜像
# 命令:docker pull 镜像名[:tag] 可以指定版本号 root@peksun:/www/hyperf-skeleton# docker pull mysql Using default tag: latest latest: Pulling from library/mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete 99da31dd6142: Pull complete 626033c43d70: Pull complete 37d5d7efb64e: Pull complete ac563158d721: Pull complete d2ba16033dad: Pull complete 688ba7d5c01a: Pull complete 00e060b6d11d: Pull complete 1c04857f594f: Pull complete 4d7cfa90e6ea: Pull complete e0431212d27d: Pull complete Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 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:8.0
(4)删除镜像
docker rmi -f 镜像ID #删除指定镜像 docker rmi -f 镜像ID 镜像ID 镜像ID #删除多个镜像 docker rmi -f $(docker images -aq) #删除全部镜像 -f #强制删除
3、容器命令
说明:我们有了镜像才可以创建容器,Linux下载一个centos镜像来测试学习
docker pull centos
(1)创建容器
# 命令:docker run [可选参数] 容器ID bashShell # 参数说明 --name="Name" #容器名字 Name1、Name2等,用来区分容器 -d #后台方式运行 -it #使用交互式运行,进入容器查看内容 -p #指定容器的端口 -p 8080:8080 -p [ip:主机端口:容器端口] -p [主机端口:容器端口](常用) -p [容器端口] -p #随机指定端口
# 测试,启动并进入容器
root@peksun:/www/hyperf-skeleton# docker run -it centos /bin/bash [root@e1f4c735b7eb /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的 bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr
(2)查看容器
# 命令:docker ps #列出当前正在运行的容器 -a #列出当前正在运行的容器+历史运行的容器 -n=n #显示最近创建的x个容器 -q #只显示容器的编号
(3)退出容器
exit #容器停止并退出 Ctrl+P+Q #xshell容器不停止退出
(4)删除容器
docker rm 容器ID #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f docker rm -f $(docker ps -aq) #删除所有的容器 docker ps -a -q|xargs docker rm #删除所有的容器 5.启动和停止容器 docker start 容器ID #启动容器 docker restart 容器ID #重启容器 docker stop 容器ID #停止当前正在运行的容器 docker kill 容器ID #强制停止当前容器
4、其他命令
(1)后台启动容器
# 命令:docker run -d 镜像名 root@peksun:/# docker run -d centos 81e03175680529167eff1d0efadf89ef53facb5f1c93a44299c94b5418c661bf root@peksun:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 问题docker ps,发现centos停止了 # 常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止 # NGINX,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
(2)查看日志
# 命令:docker logs -tf --tail 5 容器ID #没有日志 # 自己编写一段shell脚本测试 root@peksun:/# docker run centos /bin/sh -c "while true;do echo test;sleep 1;done" test root@peksun:/# docker ps CONTAINER ID IMAGE COMMAND 571491e8e375 centos "/bin/sh -c 'while t…" # 显示日志 -tf #显示日志 --tail #要显示日志条数 root@peksun:/# docker logs -tf --tail 5 571491e8e375 2024-06-08T08:05:25.075218792Z test
(3)查看容器进程信息
# 命令:docker top 容器ID root@peksun:/# docker top akdu28j3bsy4 UID PID PPID C STIME TTY TIME CMD root 9995 9973 0 16:23 pts/0 00:00:00 /bin/bash
(4)查看镜像的元数据
# 命令:docker inspect 容器ID root@peksun:/# docker inspect akdu28j3bsy4
(5)进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置 # 命令:docker exec -it 容器ID bashShell # 测试 root@peksun:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES akdu28j3bsy4 centos "/bin/bash" 14 minutes ago Up 14 minutes brave_satoshi root@peksun:/# docker exec -it akdu28j3bsy4 /bin/bash [root@akdu28j3bsy4 /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:23 pts/0 00:00:00 /bin/bash root 16 0 0 08:37 pts/1 00:00:00 /bin/bash root 31 16 0 08:38 pts/1 00:00:00 ps -ef # 方式二 docker attach 容器ID root@peksun:/# docker attach akdu28j3bsy4 # docker exec #进入容器后开启一个新的终端,可以在里面操作(常用) # docker attach #进入容器正在执行的终端,不会启动新的进程
(6)从容器内拷贝文件到本机上
# 命令:docker cp 容器ID:容器内路径 目的地主机路径 # 1.查看当前主机目录下 root@peksun:/home# ls root@peksun:/home# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c48747072ff2 centos "/bin/bash" 59 seconds ago Up 58 seconds nervous_feynman # 2.进入docker容器内部,新建文件并退出 root@peksun:/home# docker attach c48747072ff2 [root@c48747072ff2 /]# touch a.go [root@c48747072ff2 /]# exit exit # 3.将容器内部文件拷贝到本地主机上 root@peksun:/home# docker cp c48747072ff2:/a.go /home Successfully copied 1.54kB to /home root@peksun:/home# ls
5、运行Nginx镜像
# 1.搜索镜像 docker search nginx # 2.下载镜像 docker pull nginx # 3.运行测试 root@peksun:/# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 2 years ago 141MB centos latest 5d0da3dc9764 2 years ago 231MB # -d 后台运行 # --name 给容器命名 # -p 宿主机端口,容器内部端口 root@peksun:/# docker run -d --name nginx01 -p 3344:80 nginx dskwfiujqllwi882bz6ahwiops0wl2bbzus7di28y72mozo9zshl3lj2hs7syh12g23 root@peksun:/# docker ps -q da0e2f601cf7 root@peksun:/# curl localhost:3344 # 进入容器后开启一个新的终端 root@peksun:/# docker exec -it nginx01 /bin/bash root@da0e2f601cf7:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@da0e2f601cf7:/# ls /etc/nginx/ conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params