# Docker常用命令

# 帮助命令

docker version  # 版本信息
docker info  # 系统信息
docker 命令 --help

帮助文档地址 (opens new window)

# 镜像命令

docker images 查看本地主机上的镜像

[root@VM-20-7-centos docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   15 months ago   13.3kB


# 可选项
  -a, --all             # 列出所有镜像
  -q, --quiet           # 只显示镜像ID

docker search 搜索镜像

[root@VM-20-7-centos docker]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL
mysql                             MySQL is a widely used, open-source relation…   15301     [OK]
mariadb                           MariaDB Server is a high performing open sou…   5828      [OK]
phpmyadmin                        phpMyAdmin - A web interface for MySQL and M…   1017      [OK]

# 可选项,搜索收藏3000以上的镜像
--filter=STARS=3000

docker pull 下载镜像

# 下载镜像docker pull 镜像名[:tag]
[root@VM-20-7-centos docker]# docker pull mysql
Using default tag: latest  # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
d9a40b27c30f: Pull complete  # 分层下载, docker image的核心 联合文件系统
fe4b01031aab: Pull complete
aa72c34c4347: Pull complete
473ade985fa2: Pull complete
cc168a9482de: Pull complete
3ca3786815dd: Pull complete
3e3fac98ea83: Pull complete
10e5505c3ae4: Pull complete
a79ade39aab9: Pull complete
ae34d51c6da2: Pull complete
Digest: sha256:d8df069848906979fd7511db00dc22efeb0a33a990d87c3c6d3fcdafd6fc6123 # 签名
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

docker rmi 删除镜像

[root@VM-20-7-centos docker]# docker rmi -f 容器ID      # 删除指定容器
[root@VM-20-7-centos docker]# docker rmi -f 容器ID 容器ID 容器ID     # 删除指定容器
[root@VM-20-7-centos ~]# docker rmi -f $(docker images -aq)   # 删除所有命令,拿到所有的ID,再用ID去删除

# 容器命令

Docker 容器是镜像的运行实例,首先需要下载一个镜像

docker pull centos

新建容器并启动

每一个启动过的容器都有伊恩containerid,包括历史启动过的

docker run [可选参数] image

# 参数说明
--name="Name"   容器名字  centos1 centos2 ,用于区分容器
-d	            后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p              指定容器端口  -p  8080:8080
	-p  ip:主机端口:容器端口
	-p  主机端口:容器端口
	-p  容器端口
	容器端口
-P              随机指定端口

# 测试,启动并进入容器
[root@VM-20-7-centos ~]# docker run -it centos /bin/bash
[root@37014cca6e59 /]#ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器退出到主机
[root@37014cca6e59 /]# exit
exit
[root@VM-20-7-centos /]# ls
bin   data  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
boot  dev   home  lib64  media       opt  root  sbin  sys  usr

查看运行中的容器

# docker ps 命令
   # 显示最近运行的容器
-a # 显示最近运行的容器+历史运行的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号CONTAINER ID 

[root@VM-20-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@VM-20-7-centos /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                       PORTS     NAMES
37014cca6e59   centos         "/bin/bash"   5 minutes ago   Exited (130) 2 minutes ago             condescending_dewdney
7e27229c38ce   d2c94e258dcb   "/hello"      13 hours ago    Exited (0) 13 hours ago                peaceful_mcnulty

退出容器

exit  # 容器停止退出
ctrl + p + q  # 容器不停止退出

[root@VM-20-7-centos /]# docker run -it centos /bin/bash
[root@3a87ddaae533 /]# [root@VM-20-7-centos /]#
[root@VM-20-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
3a87ddaae533   centos    "/bin/bash"   47 seconds ago   Up 47 seconds             great_dubinsky
[root@VM-20-7-centos /]#

删除容器

docker rm 容器id    # 删除指定的容器,不能删除正在运行的容器,如果要强制删除  rm -rf
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器

启动和停止容器的操作

docker start 容器ID     # 启动容器
docker stop 容器ID      # 关闭容器
docker restart 容器ID	  # 重启容器
docker kill 容器ID      # 强制停止容器

# 常用其他命令

后台启动

# docker run -d 镜像名
[root@VM-20-7-centos /]# docker run -d centos

# 问题 docker ps 发现centos 停止了

# 常见的坑  docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有前台应用,就会自动停止

查看日志

docker logs [参数]
-f  # 持续输出新生成的日志
-t  # 显示时间戳
--tail number # 显示日志的最后几行


# 测试
[root@VM-20-7-centos /]# docker run -d centos /bin/bash -c "while true;do echo rong;sleep 1;done"
6ab070632a3786f8d15d93ace21e2bb53775ef60f6ddb72f86371962853ec2b1
[root@VM-20-7-centos /]# docker logs -tf --tail 10 6ab07
2024-08-18T04:17:29.377142371Z rong
2024-08-18T04:17:30.378593786Z rong
2024-08-18T04:17:31.380054880Z rong
2024-08-18T04:17:32.381486168Z rong
2024-08-18T04:17:33.383041959Z rong
2024-08-18T04:17:34.384493754Z rong
2024-08-18T04:17:35.385956572Z rong
2024-08-18T04:17:36.387386266Z rong

查看容器的进程信息

# docker top 容器id
[root@VM-20-7-centos /]#  docker top 6ab070632a37
UID                 PID                 PPID                C                   STIME     
root                16728               16707               0                   12:17     
root                18362               16728               0                   12:21     

查看镜像的元数据

# 命令
docker inspect 容器id

# 测试
[root@VM-20-7-centos /]# docker inspect 6ab070632a37

进入当前正在运行的容器

# 命令 
docker exec -it 容器ID /bin/bash  # 进入容器,并开启一个新的控制台

# 测试
[root@VM-20-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
6ab070632a37   centos    "/bin/bash -c 'while…"   13 minutes ago   Up 12 minutes             hopeful_colden
[root@VM-20-7-centos /]# docker exec -it 6ab070632a37 /bin/bash
[root@6ab070632a37 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@6ab070632a37 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 04:17 ?        00:00:00 /bin/bash -c while true;do echo rong;sleep 1;done
root       905     0  0 04:32 pts/0    00:00:00 /bin/bash
root       926     1  0 04:32 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /us
root       927   905  0 04:32 pts/0    00:00:00 ps -ef


# 方式2
docker attach 容器ID  # 进入容器正在运行的控制台

从主机拷贝文件到容器上

只要容器在,数据就在,和容器运行没运行无关

docker

[root@VM-20-7-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-20-7-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   15 months ago   13.3kB
centos        latest    5d0da3dc9764   2 years ago     231MB
[root@VM-20-7-centos ~]# docker run -it centos /bin/bash
[root@86db2950731e /]# [root@VM-20-7-centos ~]#
[root@VM-20-7-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
86db2950731e   centos    "/bin/bash"   22 seconds ago   Up 21 seconds             nifty_matsumoto

# 进入容器内部
[root@VM-20-7-centos home]# docker attach 86db2950731e
[root@86db2950731e /]# cd /home
[root@86db2950731e home]# ls

# 容器内新建一个文件
[root@86db2950731e home]# touch test.java
[root@86db2950731e home]# ls
test.java
[root@86db2950731e home]# exit
exit

# 将文件拷贝出来到主机上
[root@VM-20-7-centos home]# docker cp 86db2950731e:/home/test.java  /home
Successfully copied 1.54kB to /home
[root@VM-20-7-centos home]# ls
lighthouse  rong.java  test.java

# 目前是手动拷贝,后面可以通过容器卷自动拷贝

# 小结

docker命令详解

attach    Attach to a running container                 # 当前    shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过    Dockerfile 定制镜像
commit   Create a new image from a container changes   # 提交当前容器为新的镜像 
cp       Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同run,但不启动容器
diff     Inspect changes on a container's filesystem   # 查看 docker 容器变化 
events   Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应import ]
history   Show the history of an image                  # 展示一个镜像形成历史 
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从 tar包中的内容创建一个新的文件系统映[对应export]
info      Display system-wide information               # 显示系统相关信息 
inspect   Return low-level information on a container   # 查看容器详细信息 
kill      Kill a running container                      # kill 指定    docker 容器
load      Load an image from a tar archive              # 从一个    tar 包中加载一个镜像[对应save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前    Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息 
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
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 to a tar archive                # 保存一个镜像为一个 tar 包[对应load]
search    Search for an image on the Docker Hub         # 在  docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签 
top       Lookup the running processes of a container   # 查看容器中运行的进程信 息
unpause   Unpause a paused container                    # 取消暂停容器 
version   Show the docker version information           # 查看    docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值

# 案例

  1. 部署nginx
# 1、搜索镜像
# 2、下载镜像
# 3、运行测试
[root@VM-20-7-centos home]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
nginx           1.27.1    5ef79149e0ec   3 days ago      188MB

# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@VM-20-7-centos home]# docker run -d --name nginx01 -p 4396:80 nginx:1.27.1
46905d813f506080ed4b3c655b7750a3e03a31ea871d429ea3dcb8d9bbfe173c
[root@VM-20-7-centos home]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                   NAMES
46905d813f50   nginx:1.27.1   "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:4396->80/tcp, :::4396->80/tcp   nginx01

# 测试访问
[root@VM-20-7-centos home]# curl localhost:4396

# 进入容器
[root@VM-20-7-centos home]# docker exec -it nginx01 /bin/bash
root@46905d813f50:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@46905d813f50:/# cd /etc/nginx
root@46905d813f50:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params

思考:每次修改nginx配置文件,都需要进入容器内部,十分麻烦!要是可以在容器外部提供一个映射路径,实现在容器外修改文件,容器内部就可以自动修改? -v 数据卷!

  1. 部署tomcat
# 官方推荐  --rm 用完即删 ,适用于测试
docker run -it --rm tomcat:9.0

# 下载
docker pull tomcat:9.0

# 启动运行
docker run -d -p 4396:8080 --name tomcat01 tomcat:9.0

# 测试访问没有问题

# 进入容器
[root@VM-20-7-centos home]# docker exec -it tomcat01 /bin/bash

# 发现问题:1、linux命令少了 2、没有webapps。 腾讯云镜像默认是最小镜像,所有不必要内容都被剔除

# 把webapps.dist下内容复制到webapps
cp -f webapps.dist/* webapps

思考问题:部署项目每次都要进入容器十分麻烦,要是可以在容器外部提供一个映射路径,webapps,在外部防止项目,自动同步到内部就好了

  1. 部署es+kibana

kibana 是es的数据可视化和分析平台

# es暴露的端口很多
# 十分耗内存
# es的数据一般需要放置到安全目录

[root@VM-20-7-centos home]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:8.15.0
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.15.0

# 启动后就卡住了 docker stats  查看cpu状态

[root@VM-20-7-centos home]# docker stats
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O        PIDS
818931fbf758   elasticsearch   1.21%     1.431GiB / 1.952GiB   73.31%    656B / 0B   429MB / 2.29MB   83

# 添加内存限制
[root@VM-20-7-centos home]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:8.15.0
# 再次查看内存使用情况
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O        PIDS
31bd8b696851   elasticsearch   0.99%     635MiB / 1.952GiB   31.77%    656B / 0B   184MB / 2.16MB   83

# 测试会访问失败

# 进入容器  发现jdk版本不对
[root@VM-20-7-centos home]# docker exec -it elasticsearch /bin/bash
elasticsearch@b8e6b669d669:~$ java -version
bash: java: command not found

# 安装低版本es并启动、7.17.23
[root@VM-20-7-centos home]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:7.17.23


# 测试成功
[root@VM-20-7-centos home]# curl localhost:9200
{
  "name" : "608f46e4da8c",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "bkVPEQmPRGerhpM-uwWaFA",
  "version" : {
    "number" : "7.17.23",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "61d76462eecaf09ada684d1b5d319b5ff6865a83",
    "build_date" : "2024-07-25T14:37:42.448799567Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.3",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

思考:查看容器运行状态、添加限制

# 可视化

什么Portainer?

Docker图形化界面管理工具!很香很好用

  • Portainer(先用这个)
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

# 测试访问
http://server-ip:8088/

# 首次登录需要设置密码

portainer

管理界面

portainer管理界面

  • Rancher(CI/CD 再用)
#安装rancher-server
docker run --name rancher-server -p 8000:8080 -v 
/etc/localtime:/etc/localtime:ro  -d  rancher/server 
#安装agent
docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v 
/var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11
http://39.101.191.131:8000/v1/scripts/D3DBD43F263109BB881F:1577750400000:7M0y 
BzCw4XSxJklD7TpysYIpI

优质文章 (opens new window)

Last Updated: 12/23/2024, 4:18:13 AM