Docker常用命令


docker version 查看docker版本信息

docker info 查看docker系统信息 system 级别

docker help 查看帮助信息 命令

docker CLI文档 & 帮助文档

镜像命令


docker images

Jeffrey@Jeffrey  ~  docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    3218b38490ce   4 weeks ago    516MB
centos       latest    e6a0117ec169   4 months ago   272MB

解释

  • REPOSITORY 镜像的仓库源
  • TAG 镜像的标签
  • IMAGE ID 镜像的ID
  • CREATED 镜像的创建时间
  • `SIZE 镜像的大小

**可选项 **

  -a, --all             #列出所有的镜像
  -q, --quiet           #只显示镜像的id
搜索镜像 docker search

Jeffrey@Jeffrey  /  docker search mysql
NAME                 DESCRIPTION            					STARS     OFFICIAL   AUTOMATED
mysql  	MySQL is a widely used, open-source relation…   11997     [OK]       
mariadb MariaDB Server is a high performing open sou…   4595      [OK]     
......

**可选项 **

  -f, --filter filter  #过滤   docker search --filter=STARS=3000   过滤STARS大于3000的
下载镜像 docker pull

docker pull 镜像名 [:tag] 指定版本,不写TAG 默认最新的

Jeffrey@Jeffrey  /  docker pull mysql                      
Using default tag: latest
latest: Pulling from library/mysql
latest: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries
#由于Mac M1 是M1芯片,官方包支持,所以过滤搜索支持的
#=============================================================================
Jeffrey@Jeffrey  /  docker pull --platform linux/x86_64 mysql
Using default tag: latest 
latest: Pulling from library/mysql
72a69066d2fe: Pull complete   			#docker image的核心 =》 分层下载
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的真实地址

# docker pull --platform linux/x86_64 mysql ===等价于=== docker.io/library/mysql:latest
删除镜像 docker rmi -f
docker rmi -f 18e5af790473  # 根据容器id进行删除
#docker rmi -f 容器id 容器id2 容器id3 容器di4
docker rmi -f $(docker images -aq) #查询出所有的镜像id   进行递归批量**容器命令**

容器命令


说明:有了镜像才可以创建容器,linux,下载一个centos镜像测试学习*

创建/运行容器

docker pull centos

docker run [可选参数] image

#创建容器
docker pull centos
#运行容器
docker run [可选参数] image
#常用参数
--name="Name" 	容器名称  tomcat01
-d							后台方式运行
-i -t 					交互方式运行,进入容器查看内容
-p							指定容器的端口:8080:8080
		-p	IP:主机端口:映射容器端口
		-p	主机端口:映射容器端口(常用)
		-p	容器端口
		容器端口
-P							随机指定端口

#例子
Jeffrey@Jeffrey > docker run -it centos /bin/bash
[root@b370ddb8872d /]# ls

查看容器

docker ps

#列出所有运行的容器
 Jeffrey@Jeffrey  /  docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# docker ps
-a							列出当前运行的容器+历史运行过的容器
-n=Num					列出最进运行过的容器
-q							只显示容器的编号
-aq							只显示(当前运行+历史运行)的容器的编号
退出容器
#直接退出容器,容器停止
[root@b370ddb8872d /]# exit
#退出容器,容器不停止
Ctrl + P + Q
删除容器

docker rm -f $(docker ps -aq) || docker ps -a -q|xargs docker rm

					 	 #删除指定的容器,不能删除正在运行的容器,强制删除:rm -f
docker rm -f $(docker ps -aq)			#删除所有容器
docker ps -a -q|xargs docker rm		#删除所有容器
启动/停止容器
docker start 容器ID						启动容器
docker restart 容器ID					重启当前正在运行的容器
docker stop 容器ID						停止当前正在运行的容器
docker kill 容器ID						杀掉当前正在运行的容器

常用其他命令

后台启动容器

docker run -d centos

#docker run -d 镜像名称
Jeffrey@Jeffrey  ~  docker run -d centos
bf8c16435567538a9f2052803ac3f2735af1071c5e062a962b875d6ddfa00b3f
Jeffrey@Jeffrey  ~  docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#注意:docker ps 发现容器停止了
#常见的坑:docker容器使用后台运行,就必须有一个前台进程,docker发现没有应用,就会自动停止
#以上的centos 在容器启动后,发现自己没有提供服务,就会立刻停止
查看日志

docker logs -t -f --tail [:number] 容器id

docker logs -t -f --tail [:number] 容器id

## 显示日志
-tf 					#显示所有日志
--tail nums		#显示指定数量的日志信息

###测试 | 编写一段脚本进行测试

Jeffrey@Jeffrey  ~  docker run -d centos /bin/sh -c "while true;do echo Jeffrey;sleep 1;done"
177dd25b70615257abab44a241797fa7e226a22fd1b1e9c2909c6c4fdfd42535
Jeffrey@Jeffrey  ~  docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
177dd25b7061   centos    "/bin/sh -c 'while t…"   4 seconds ago   Up 3 seconds             busy_sinoussi
Jeffrey@Jeffrey  ~  docker logs -tf --tail 10 177dd25b7061
2022-01-21T07:22:50.346652796Z Jeffrey
2022-01-21T07:22:51.353023921Z Jeffrey
2022-01-21T07:22:52.361788380Z Jeffrey
2022-01-21T07:22:53.371457547Z Jeffrey
2022-01-21T07:22:54.376483631Z Jeffrey
2022-01-21T07:22:55.380710007Z Jeffrey
2022-01-21T07:22:56.384901757Z Jeffrey
2022-01-21T07:22:57.395018841Z Jeffrey
2022-01-21T07:22:58.405004341Z Jeffrey
2022-01-21T07:22:59.413037967Z Jeffrey
2022-01-21T07:23:00.420680509Z Jeffrey
.......
查看容器中的进程信息

docker top 容器ID

docker top 容器ID

Jeffrey@Jeffrey  ~  docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
177dd25b7061   centos    "/bin/sh -c 'while t…"   6 minutes ago   Up 6 minutes             busy_sinoussi
 Jeffrey@Jeffrey  ~  docker top 177dd25b7061
UID    PID   PPID   C  STIME  TTY   TIME   	   CMD
root   4381  4356   0  07:22  ?   00:00:00  /bin/sh *********  sleep 1;done
root   4832  4381   0  07:29  ?   00:00:00  /usr/bin ********* leep /usr/bin/sleep 1
查看容器元数据信息

docker inspect 容器ID

Jeffrey@Jeffrey  ~  docker inspect 177dd25b7061
[
    {
        "Id": "177dd25b70615257abab44a241797fa7e226a22fd1b1e9c2909c6c4fdfd42535",
        "Created": "2022-01-21T07:22:35.987721595Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo Jeffrey;sleep 1;done"
        ],
        "State": {
           `*******`
        },
        "Image": "sha256:e6a0117ec169eda93dc5ca978c6ac87580e36765a66097a6bfb6639a3bd4038a",
        
        `********`
       
        }
    }
]
进入当前运行的容器

docker exec -it 容器ID baseShell

docker attach 容器ID

*区别:exec 进入容器后,打开一个新的终端(常用)*

attach 进入容器正在运行的终端,不会启动新的线程

Jeffrey@Jeffrey  ~  docker ps                             
CONTAINER ID   IMAGE     COMMAND    CREATED          STATUS          PORTS     NAMES
177dd25b7061   centos    "/bin/…"   20 minutes ago   Up 20 minutes            busy_sinoussi
Jeffrey@Jeffrey  ~  docker exec -it 177dd25b7061 /bin/bash       
[root@177dd25b7061 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
从容器内拷贝文件到主机

docker cp 容器ID:容器内路径 目标主机路径

#容器内创建文件
Jeffrey@Jeffrey  ~  docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
c5faef731d6e   centos    "/bin/bash"   25 seconds ago   Up 24 seconds             vigilant_joliot
#进入docker容器内部
Jeffrey@Jeffrey  ~  docker attach c5faef731d6e
[root@c5faef731d6e /]# cd home/
[root@c5faef731d6e home]# ls  
[root@c5faef731d6e home]# touch test.php
[root@c5faef731d6e home]# exit    #退出不影响
#进行文件Copy
Jeffrey@Jeffrey  ~  docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS                        PORTS     NAMES
c5faef731d6e   centos    "/bin/bash"   About a minute ago   Exited (127) 37 seconds ago             vigilant_joliot
bf8c16435567   centos    "/bin/bash"   46 minutes ago       Exited (0) 46 minutes ago               wizardly_liskov
2c924d3240f0   centos    "/bin/bash"   58 minutes ago       Exited (0) 57 minutes ago               elastic_sanderson
Jeffrey@Jeffrey  ~  docker cp c5faef731d6e:/home/test.php /Users/Jeffrey/PhpWwwRoot/dingoApi 
Jeffrey@Jeffrey  ~  cd /Users/Jeffrey/PhpWwwRoot/dingoApi 
Jeffrey@Jeffrey  ~/PhpWwwRoot/dingoApi  ll
total 0
-rw-r--r--  1 Jeffrey  staff     0B Jan 21 16:03 test.php

## 拷贝是一个手动的过程,未来我们使用-v数据卷的技术,实现自动同步

image-20220125110522606

Docker安装Nginx

#搜索镜像
docker search nginx
#下载镜像
docker pull nginx
#运行nginx容器  -d 后台运行  --name 命名 nginx01   -p 宿主机:容器内部端口   
docker run -d --name nginx01 -p 3344:80 nginx
#==========================实例===============================
Jeffrey@Jeffrey  ~  docker run -d --name nginx01 -p 3344:80 nginx
940119dd19390a463a44c8037f8cccc9dc8ea3d90df94d92d82dfecb46e45be1
Jeffrey@Jeffrey  ~  docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
940119dd1939   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:3344->80/tcp   nginx01
Jeffrey@Jeffrey  ~  curl 127.0.0.1:3344 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
 Jeffrey@Jeffrey  ~  

图解:端口暴露的概念:相当于端口号的映射

image-20220125155836829

Docker安装Tomcat

官方使用案例 docker run -it --rm tomcat:9.0

–rm 一般用来测试,用完即删除 不加–rm 在容器停止之后,容器还可以查到 除了测试不建议使用

#下载最新版
docker pull tomcat
#启动运行
docker run -d -p 3345:8080 --name tomcat01 tomcat
#http://127.0.0.1:3345/可以访问,但是报错404

#进入容器
docker exec -it tomcat01 /bin/bash

#发现问题
# 1、linux命令不全
# 2、webapps目录下年是空的  【镜像的原因:默认最小镜像,所有必须要的内容都剔除掉了】
# 保证最小可运行的环境
# 发现webapps.dist目录
root@a95b956bc409:/usr/local/tomcat# ls -al
total 176
drwxr-xr-x 1 root root  4096 Dec 21 20:39 .
drwxr-xr-x 1 root root  4096 Dec 21 20:31 ..
-rw-r--r-- 1 root root 18994 Dec  2 22:01 BUILDING.txt
-rw-r--r-- 1 root root  6210 Dec  2 22:01 CONTRIBUTING.md
-rw-r--r-- 1 root root 60269 Dec  2 22:01 LICENSE
-rw-r--r-- 1 root root  2333 Dec  2 22:01 NOTICE
-rw-r--r-- 1 root root  3378 Dec  2 22:01 README.md
-rw-r--r-- 1 root root  6905 Dec  2 22:01 RELEASE-NOTES
-rw-r--r-- 1 root root 16517 Dec  2 22:01 RUNNING.txt
drwxr-xr-x 2 root root  4096 Dec 21 20:39 bin
drwxr-xr-x 1 root root  4096 Jan 25 09:05 conf
drwxr-xr-x 2 root root  4096 Dec 21 20:39 lib
drwxrwxrwx 1 root root  4096 Jan 25 09:05 logs
drwxr-xr-x 2 root root  4096 Dec 21 20:39 native-jni-lib
drwxrwxrwx 2 root root  4096 Dec 21 20:39 temp
drwxr-xr-x 2 root root  4096 Dec 21 20:39 webapps
drwxr-xr-x 7 root root  4096 Dec  2 22:01 webapps.dist
drwxrwxrwx 2 root root  4096 Dec  2 22:01 work

#将webapps.dist目录下的内容  全部拷贝到webapps目录下
root@a95b956bc409:/usr/local/tomcat# cp -r webapps.dist/* webapps

#访问 http://127.0.0.1:3345/ 正常访问  Tomcat

Docker 安装 ES + Kibana

# es 暴露的端口很多
# es 十分的耗内存
# es 的数据一般需要放在安全目录,需要用到挂载技术
# --net somenetwork  网络配置
$ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
# 不限制内存的情况下,特别占内存,服务器会特别卡,下面启动是限制了内存的操作
#启动es
$ docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms=64m -Xmx512m" elasticsearch:7.6.2
docker run -d \
--restart unless-stopped --name btpanel \
-p 8888:8888 \
-p 22:22 \
-p 443:443 \
-p 80:80 \
-p 888:888 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www/wwwroot \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/www/server/data \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx/vhost:/www/server/panel/vhost \
--privileged=true
btpanel/btpanel:lnmp

docker run -d \
--restart unless-stopped --name btpanel \
-p 8888:8888 \
-p 22:22 \
-p 443:443 \
-p 80:80 \
-p 888:888 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www/wwwroot \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/www/server/data \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx/vhost:/www/server/panel/vhost \
--privileged=true
btpanel/btpanel:lnmp
docker run -dit \
-p 80:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/data/mysql \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql:/etc \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx:/usr/local/nginx \
-v /Users/Jeffrey/DockerMapping/lnmp/php7:/usr/local/php7 \
--privileged=true \
--name=lnmp \
2233466866/lnmp

/Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www
/Users/Jeffrey/DockerMapping/lnmp/mysql:/etc/
/Users/Jeffrey/DockerMapping/lnmp/nginx:/usr/local/nginx
/Users/Jeffrey/DockerMapping/lnmp/php7:/usr/local/php7

docker run -d \
--restart unless-stopped --name btpanel \
-p 8888:8888 \
-p 22:22 \
-p 443:443 \
-p 80:80 \
-p 888:888 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www/wwwroot \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/www/server/data \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx/vhost:/www/server/panel/vhost \
btpanel/btpanel:lnmp
文档更新时间: 2023-12-18 03:25   作者:JeffreyCheung