开发

软件开发相关知识

docker命令全集

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