Docker基础命令及原理

Docker的常用命令

帮助命令

1
2
3
docker version     #显示 docker 的版本  
docker info        #显示 docker 的系统信息:包括镜像和容器的数量  
docker 命令 --help  #帮助命令  

镜像命令

docker images 查看所有镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
f10wers13eicheng@MacBookPro [12时12分59秒] [/Library/Java/JavaVirtualMachines]   
-> % docker images  
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE  
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB  
  
# 解释  
REPOSITORY 镜像的仓库源  
TAG        镜像的标签  
IMAGE ID   镜像的id  
CREATED    镜像的创建时间  
SIZE       镜像的大小  
  
-a # 列出所有镜像  
-q # 显示镜像id  

docker search 镜像名 搜索镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
f10wers13eicheng@MacBookPro [12时25分22秒] [/Library/Java/JavaVirtualMachines]   
-> % docker search mysql  
NAME                            DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED  
mysql                           MySQL is a widely used, open-source relation…   14805     [OK]         
mariadb                         MariaDB Server is a high performing open sou…   5653      [OK]         
percona                         Percona Server is a fork of the MySQL relati…   623       [OK]         
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   934       [OK]         
bitnami/mysql                   Bitnami MySQL Docker Image                       106                  [OK]  
bitnami/mysqld-exporter                                                          6                      
cimg/mysql                                                                       3                      
ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   58                     
rapidfort/mysql                 RapidFort optimized, hardened image for MySQL    25                     
rapidfort/mysql8-ib             RapidFort optimized, hardened image for MySQ…   9                      
google/mysql                    MySQL server for Google Compute Engine           25                   [OK]  
rapidfort/mysql-official        RapidFort optimized, hardened image for MySQ…   9                      
elestio/mysql                   Mysql, verified and packaged by Elestio          0                      
hashicorp/mysql-portworx-demo                                                    0                      
bitnamicharts/mysql                                                              0                      
databack/mysql-backup           Back up mysql databases to... anywhere!          105                    
linuxserver/mysql               A Mysql container, brought to you by LinuxSe…   41                     
mirantis/mysql                                                                   0                      
docksal/mysql                   MySQL service images for Docksal - https://d…   0                      
linuxserver/mysql-workbench                                                      54                     
vitess/mysqlctld                vitess/mysqlctld                                 1                    [OK]  
eclipse/mysql                   Mysql 5.7, curl, rsync                           1                    [OK]  
drupalci/mysql-5.5              https://www.drupal.org/project/drupalci          3                    [OK]  
drupalci/mysql-5.7              https://www.drupal.org/project/drupalci          0                      
datajoint/mysql                 MySQL image pre-configured to work smoothly …   2                    [OK]  

docker pull 镜像名[:tag] 下载镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
f10wers13eicheng@MacBookPro [12时25分27秒] [/Library/Java/JavaVirtualMachines]   
-> % docker pull mysql  # 不写 tag 默认就是 latest  
Using default tag: latest  
latest: Pulling from library/mysql  
72a69066d2fe: Pull complete #分层下载 docker images的核心  
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 rmi 镜像id 删除镜像

容器命令

docker pull centos 下载centos镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
docker run [可选参数] image  
# 参数说明  
--name="Name" #容器名字  
-d            #后台方式运行  
-it           #是用交互方式运行,进入容器查看内容  
-p            #指定容器的端口 -p 8080:8080  
   -p ip:主机端口:容器端口  
   -p 主机端口:容器端口  
   -p 容器端口  
-P            #随机指定端口  
  
# 启动并进入容器  
f10wers13eicheng@MacBookPro [12时35分17秒] [/Library/Java/JavaVirtualMachines]   
-> % docker run -it centos /bin/bash                           
[root@a9def1b9102e /]# ls # 查看容器内的目录  
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  
[root@a9def1b9102e /]# whoami  
root  
[root@a9def1b9102e /]# exit #从容器中退回主机  

列出所有运行的容器

1
2
3
4
docker ps 命令  
-a #列出当前正在运行的容器 + 带历史运行过的容器  
-n=? #显示最近创建的容器  
-q #显示容器id  

exit 直接容器停止并退出
Ctrl + P + Q 容器不停止但退出
删除容器

1
2
docker rm 容器id               #删除指定容器  
docker rm -f $(docker ps -aq) #删除所有容器  

启动和停止容器的操作

1
2
3
4
docker start 容器id      #启动容器  
docker restart 容器id    #重启容器  
docker stop  容器id      #停止容器  
docker kill  容器id      #停止当前运行的容器并删除  

常用的其他命令

后台启动容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# docker run -d 镜像名  
f10wers13eicheng@MacBookPro [12时46分50秒] [/Library/Java/JavaVirtualMachines]   
-> % docker run -d centos        
8587f88f16bbc5fdb9dfb6de01c5173d9c25c23ed1f99d11b1d52575167cbefa  
f10wers13eicheng@MacBookPro [12时46分58秒] [/Library/Java/JavaVirtualMachines]   
-> % docker ps             
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES  
  
# docker ps发现 centos停止了  
# 常见的坑 docker容器使用后台运行,就必须要有一个前台进程 docker 发现没有应用,就会自动停止  
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止。  

查看日志

1
2
3
4
5
docker logs # 查看日志信息  
docker logs -tf 容器id  
# 显示日志  
-tf      # 显示日志  
--tail   # 显示日志条数  

查看容器中进程信息

1
docker top 容器id  

查看容器的元数据
docker inspect 容器id
进入当前正在运行的容器

1
2
3
4
5
# 通常容器都是使用后台方式运行的,需要进入容器,修改一些配置  
# 命令  
docker exec -it 容器id /bin/bash #进入容器后开启一个新的终端  
  
docker attach 容器id # 进入容器正在执行的终端,不会启动一个新的进程  

从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径

部署 nginx - Docker练习

docker search nginx 搜索镜像
docker pull nginx 下载镜像
docker run -d --name nginx01 -p 3344:80 nginx 启动镜像

部署 tomcat - Docker练习

docker pull tomcat
docker run -d --name tomcat01 -p 3345:8080 tomcat
docker exec -it tomcat01 /bin/bash 进入容器

Es+Kibana - Docker练习

1
2
3
4
5
6
# --net 网络配置   
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2  
  
docker stats # 查看cpu状态  
-e #环境配置修改  
   

Docker 镜像

如何得到镜像?

  • 从远程仓库下载
  • 自己制作一个 Dockerfile

镜像加载原理

UnionFS(联合文件系统)

commit镜像

1
2
docker commit 提交容器称为一个新的副本  
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]  
0%