【Docker】常用命令

博观而约取,厚积而薄发。

1. 初始Docker

【Docker】常用命令_第1张图片

2. 镜像命令

2.1 列出本地主机上的镜像信息

$ docker images [options]

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
  • REPOSITORY:镜像的仓库源
  • TAG:镜像的版本标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

可选参数(可以组合使用):

  • -a :列出本地所有的镜像(含中间映像层)
  • -q :只显示镜像ID
  • --digests : 显示镜像的摘要信息
  • --no-trunc:显示完整的镜像信息

帮助命令:

$ sudo docker images --help

Usage:	docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs

2.2 查询镜像

查询源来自 http://hub.docker.com

$ sudo docker search mysql # 镜像名

NAME              DESCRIPTION                  STARS      OFFICIAL    AUTOMATED
mysql             MySQL is a widely used,....  9682         [OK]                
mariadb           MariaDB is a community.....  3523         [OK]    
............

更多搜索:

  • 搜索stars超过20的,通过列名过滤
$ sudo docker search mysql --filter=stars=20
  • 最多搜索10条(默认25条)
$ sudo docker search mysql --limit 10 

2.3 下载镜像

$ docker pull image[:TAG] # 默认:docker pull 镜像名:latest,版本可选
  • 例如:拉取mysql;
$ sudo docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
8559a31e96f4: Pull complete 
d51ce1c2e575: Pull complete 
c2344adc4858: Pull complete 
fcf3ceff18fc: Pull complete 
16da0c38dc5b: Pull complete 
b905d1797e97: Pull complete 
4b50d1c6b05c: Pull complete 
c75914a65ca2: Pull complete 
1ae8042bdd09: Pull complete 
453ac13c00a3: Pull complete 
9e680cd72f08: Pull complete 
a6b5dc864b6c: Pull complete 
Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

2.4 删除镜像

$ docker rmi 镜像ID[:TAG]
  • 强制删除 -f
$ sudo docker rmi -f bf756fb1ae65
Untagged: hello-world:latest
Untagged:helloworld@sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
  • 删除多个
$ docker rmi -f 镜像名1 镜像名2
  • 删除全部
$ docker rmi -f $(docker images -qa)

3. 容器命令

3.1 新建并启动容器

  • options:
    • --name="容器新名字": 为容器指定一个名称;
    • -d: 后台运行容器,并返回容器ID,也即启动守护式容器
    • -i以交互模式运行容器,通常与 -t 同时使用
    • -t为容器重新分配一个伪输入终端,通常与 -i 同时使用
    • -P: 随机端口映射;
    • -p: 指定端口映射,有以下四种格式
      • ip:hostPort:containerPort
      • ip::containerPort
      • hostPort:containerPort
      • containerPort
$ socker run -it 镜像ID

3.2 列出当前所有正在运行的容器

  • options:
    • -a :列出当前所有正在运行的容器+历史上运行过的
    • -l :显示最近创建的容器。
    • -n 10:显示最近创建的10个容器。
    • -q :静默模式,只显示容器编号。
    • --no-trunc:不截断输出。
$ sudo docker ps
CONTAINER ID    IMAGE     COMMAND      CREATED             STATUS         PORTS      NAMES
1219aae1f4a8    ubuntu    "/bin/bash"  42 seconds ago     Up 38 seconds            cool_kilby 

3.3 退出容器

$ exit  :容器停止运行退出
$ ctrl+P+Q :容器不停止退出

3.4 重启容器

$ docker restart 容器ID

3.5 停止容器

$ docker stop 容器ID

3.6 强制停止

$ docker kill 容器ID

3.7 删除已停止的容器

docker rm 容器ID
docker rm $(docker ps -a -q)  #删除多个容器
docker ps -a -q | xrags docker rm #删除多个容器

4.重要容器命令

4.1 启动守护式进程,通过ps查看不存在

$ docker run -d 镜像ID

# >>>>>>>>>>>>>>>>>>>>>>>>>>
$ sudo docker run -d ubuntu
12a960dcce1bf7af5f162faad7159ec094fc924db26149f86fd7ba0b528d3baf

4.2 查看容器日志

  • options
    • -t :加入时间戳
    • -f: 跟随最新的日志打印
    • -tail 30:显示最后30条
$ docker logs -f -t --tail 3 容器ID

4.3 查看容器内运行的进程

$ docker top 容器ID

4.4 查看容器内部细节

$ docker inspect 容器ID

4.5 进入正在运行的容器并以命令行交互

$ docker exec -it 容器ID bashShell
$ docker attach 容器ID
  • attach:直接进入容器启动命令的终端,不会启动新的进程
  • exec:可以直接在宿主机执行容器类的程序,例如以下:在宿主机查看ubuntu容器根目录的文件
$ sudo docker exec -t 71b ls -l /   
total 48
lrwxrwxrwx   1 root root    7 Jun  6 01:18 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Apr 15 11:09 boot
drwxr-xr-x   5 root root  360 Jun 27 10:28 dev
drwxr-xr-x   1 root root 4096 Jun 27 10:28 etc
drwxr-xr-x   2 root root 4096 Apr 15 11:09 home
......

4.6 从容器内拷贝文件到主机上

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

5. 镜像Commit

类似于git的commit,假如我们的某个镜像启动后,在产生的容器中进行了一些配置的修改,而我们想要保存本次配置过得容器就可以利用它为模板commit一个配置过后的镜像,以后启动当前镜像就已经是配置过后的容器

$ docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] 

eg:commit一个安装过vim的ubuntu镜像,名称为:atguigu/ubuntu,标签TAG为:1.2
sudo docker commit -m="install vim" -a="ydongy" 52ca02c8b0c9 atguigu/ubuntu:1.2

6. Docker容器卷

容器的持久化,即使容器停止运行,宿主机修改的数据,在容器重新启动运行后仍然能够得到数据

宿主机与容器之间数据共享

6.1 数据卷

  • 命令添加
$ docker run -it -v /宿主机绝对路经目录:/容器内目录 镜像名

eg:宿主机的/data/docker-ubuntu目录与容器ubuntu的/MyData目录建立数据共享
$ sudo docker run -it -v /data/docker-ubuntu:/MyData ubuntu

eg:只读权限,只需要加一个ro,代表read-only
$ sudo docker run -it -v /data/docker-ubuntu:/MyData:ro ubuntu

# 如果存在写权限有问题,可加后缀:--privileged=true
  • DockerFile添加
# volume test
FROM ubuntu
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] # 在容器中建立两个数据卷,宿主机可以查看内部细节
CMD echo "finished,--------success1"
CMD /bin/bash

通过build构建一个新的镜像ydongy/ubuntu注意结尾的点

$ sudo docker build -f /data/docker-ubuntu/Dockerfile -t ydongy/ubuntu .  
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM ubuntu
 ---> 74435f89ab78
Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
 ---> Running in 2be2fbf7b5fd
Removing intermediate container 2be2fbf7b5fd
 ---> a9434af08c1a
Step 3/4 : CMD echo "finished,--------success1"
 ---> Running in 6ce8192d90f7
Removing intermediate container 6ce8192d90f7
 ---> 6272fe09d969
Step 4/4 : CMD /bin/bash
 ---> Running in 7b26a6661dce
Removing intermediate container 7b26a6661dce
 ---> be0d288d5a6f
Successfully built be0d288d5a6f
Successfully tagged ydongy/ubuntu:latest

6.2 数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

一句话:继承关系,一个容器继承另一个容器,挂载数据卷可以实现共享

  • 启动一个容器
$ docker run -it --name father ubuntu
  • 启动一个子容器
$ docker run -it --name son --volumes-from father ubuntu

两个容器对数据卷进行修改时,可以实现共享数据。如果存在多个子容器继承一个父容器,所以的容器都可以共享数据,哪怕把父容器给删除了,剩余的子容器之间仍然能够共享。

你可能感兴趣的:(【Docker】常用命令)