Docker常用命令

Docker常用命令

帮助命令

docker version
docker info  #显示docker的系统信息
docker 命令 --help  #命令的帮助信息

官网帮助文档 https://docs.docker.com/reference/

镜像命令

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

[root@shop /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              300e315adb2f        12 hours ago        209MB
mariadb             latest              3a348a04a815        12 days ago         407MB
elasticsearch       7.6.2               f29a1ee41030        8 months ago        791MB
# 解释
REPOSITORY   镜像的仓库源
TAG          镜像的标签/版本
IMAGE ID     镜像id
CREATED      镜像的创建时间 
SIZE         镜像的大小

# 可选项
  -a, --all             显示所有镜像(默认隐藏中间镜像)
  -f, --filter filter   根据所提供的条件过滤输出
  -q, --quiet           只显示镜像的ID

docker search 搜索镜像

[root@shop /]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10243               [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3784                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   749                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   514                 [OK]                

# 可选参数
 -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
# 搜索start数量大于300的

docker pull 下载镜像

# 下载镜像  docker pull 镜像名[:tag]
[root@shop /]# docker pull mysql  # 如果不写tag,默认就是latest
Using default tag: latest
latest: Pulling from library/mysql
852e50cd189d: Pull complete    # 分层下载,docker images的核心,联合文件系统
29969ddb0ffb: Pull complete 
a43f41a44c48: Pull complete 
5cdd802543a3: Pull complete 
b79b040de953: Pull complete 
938c64119969: Pull complete 
7689ec51a0d9: Pull complete 
a880ba7c411f: Pull complete 
984f656ec6ca: Pull complete 
9f497bce458a: Pull complete 
b9940f97694b: Pull complete 
2f069358dc96: Pull complete 
Digest: sha256:4bb2e81a40e9d0d59bd8e3dc2ba5e1f2197696f6de39a91e90798dd27299b093  # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    # 真实地址

#下载指定版本的镜像
[root@shop /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
852e50cd189d: Already exists 
29969ddb0ffb: Already exists 
a43f41a44c48: Already exists 
5cdd802543a3: Already exists 
b79b040de953: Already exists 
938c64119969: Already exists 
7689ec51a0d9: Already exists 
36bd6224d58f: Pull complete 
cab9d3fa4c8c: Pull complete 
1b741e1c47de: Pull complete 
aac9d11987ac: Pull complete 
Digest: sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi 删除镜像

[root@shop /]# docker rmi -f ae0658fdbad5         #删除指定的镜像
[root@shop /]# docker rmi -f 容器id 容器id  容器id  # 删除多个镜像
[root@shop /]# docker rmi -f $(docker images -aq)  # 删除所有的镜像

容器命令

说明:有了镜像才能启动容器

新建容器并启动

[root@shop /]# docker run -it centos /bin/bash
[root@390c4d02180e /]# 

# 参数说明
  --name
  -a                   附加到标准输入、标准输出或标准输出
  -c  CPU共享(相对权重)
  -d  在后台运行容器并且打印id                       Run container in background and print container ID
  -e  设置环境变量
  -h  容器主机名
  -i  保持STDIN打开,即使没有附加
  -l  在容器上设置元数据
  -m  内存容量上限
  -p  指定端口                    
  		主机端口:容器端口
  		ip:主机端口:容器端口
  		容器端口
  -P 将所有公开的端口发布到随机端口
  -t 分配一个 pseudo-TTY
  -u 用户名或UID(格式:< name| UID >[:<group|gid>])
  -v 绑定挂载卷
  -w 容器内的工作目录
  
# 从容器中退出到主机
[root@390c4d02180e /]# exit
exit
[root@shop /]#

列出所有运行的容器

[root@shop /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@shop /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
390c4d02180e        centos              "/bin/bash"         10 minutes ago      Exited (0) 9 minutes ago                        infallible_aryabhata
edc034ef454d        centos              "/bin/bash"         42 minutes ago      Exited (0) 42 minutes ago                       sharp_jang
[root@shop /]# docker ps -aq
390c4d02180e
edc034ef454d

退出容器

exit          # 退出并停止容器
ctrl + P + Q  # 退出不停止

删除容器

docker rm 容器id
docker rm -f $(docker ps -aq)
docker ps -aq | xargs docker rm

启动和停止容器的操作

 docker start <容器 ID>
 docker restart <容器 ID>
 docker stop <容器 ID>
 docker kill <容器 ID>

常用的其他命令

后台启动容器

# 命令docker run-d镜像名!
[root@shop /]#docker run -d centos
#问题dockerps,发现centos停止了
#常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了|

查看日志命令

docker logs -tf --tail 条数  容器id  # 显示条数
docker logs -tf  容器id   #显示所有的日志

查看容器内部的进程信息

docker top <容器 ID>

查看元数据

docker inspect <容器 ID>

进入当前正在运行的容器

# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it <容器 ID> /bin/bash

# 方式二
docker attach  <容器 ID>  

这两个的区别

  • exec 进入容器后开启一个新的终端,可以在里面操作(常用)
  • attach

从容器内拷贝文件到主机

docker cp  <容器 ID>:容器目录   主机目录

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

小结

命令总结

image-20201212172538292


练习 - Docker安装Nginx

#  1、搜索镜像 search建议大家去docker搜索,可以看到帮助文档
#  2、下载镜像pu11
#  3、运行测试

####### 下载镜像  ###########
[root@shop /]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
852e50cd189d: Already exists 
571d7e852307: Pull complete 
addb10abd9cb: Pull complete 
d20aa7ccdb77: Pull complete 
8b03f1e11359: Pull complete 
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
####### 查看下载的镜像  ###########
[root@shop /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        13 days ago         133MB

####### 以后台运行的方式启动,并命名为nginx01,将容器的80端口映射到主机的3344上  ###########
[root@shop /]# docker run -d --name nginx01 -p 3344:80 nginx
20224440d8b08b504d750a00a72db5e1feb03650eedad2543ac505eed17728da
[root@shop /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
20224440d8b0        nginx               "/docker-entrypoint.…"   5 seconds ago       Up 4 seconds        0.0.0.0:3344->80/tcp   nginx01
####### 进入nginx01中  ###########
[root@shop /]# docker exec -it nginx01 /bin/bash
root@20224440d8b0:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@20224440d8b0:/# 

image-20201208215200808

练习2 - Docker安装Tomcat

#  官方的使用
docker run -it--rm tomcat:9.0
#  我们之前的启动都是后台,停止了容器之后,容器还是可以查到docker run-it--rm,一般用来测试,用完就删除

# 下载tomcat镜像
docker pull tomcat

# 运行tomcat镜像,访问会出现404情况,因为tomcat是最小安装,webapp下面没有任何东西。但是有一个webapps.dist文件夹下又这些目录
docker run -d -p 3355:8080 --name tomcat01 tomcat 

思考: 我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,达到在容器修改文件名。

作业三 ES + Kibana

> 一些问题
# es 暴漏的端口很多
# es 十分耗内存
# es的数据一般要放到安全目录!挂载
# --net somenetwork ? 网络配置

# 下载启动Elasticsearch,但是启动后会很卡(因为Elasticsearch十分耗内存)
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elsaticsearch:7.6.2
# 查看状态(cpu、内存)
docker status

# 增加内存的限制
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elsaticsearch:7.6.2

image-20201212110151532

可视化管理工具

Portainer

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

访问测试:http://localhost:9000

  1. 设置admin用户密码,需要输入两次相同的密码
原文地址:https://www.cnblogs.com/cuianbing/p/14468848.html