Docker常用命令

Docker学习笔记

  • 概述
    • 资源网站
    • Docker架构
    • Docker安装
  • 常用指令
    • 指令学习思路
    • Engine指令
    • Images指令
      • docker images
      • docker rmi
    • Registry指令
      • docker search
      • docker pull
    • Container指令
      • docker run
      • docker ps
      • docker start、docker restart、docker stop、docker kill
      • docker rm
      • docker exec和docker attach
      • docker logs和docker top
    • Host指令
      • docker cp

概述

资源网站

  • 官方文档 Docker DOC:Docker官方教程,对于每个指令有详细的指导教程
    • 官方教程:https://docs.docker.com/
    • 指令手册:https://docs.docker.com/reference/
  • 官方仓库 Docker Hub:Docker仓库,类似于Github,可在其中找到需要的镜像
    • https://hub.docker.com/

Docker的学习推荐在工程中使用时边学边用,通过多次使用就可以熟练掌握基础的流程。

Docker架构

Docker常用命令_第1张图片

  • 镜像(Image):镜像为一个只读模板,可用于创建Docker容器
  • 容器(Container):容器是镜像的实例化,可被启动、停止

Docker安装

此处博主直接采用鱼香ROS的一键安装脚本进行:鱼香ROS官方教程

wget http://fishros.com/install -O fishros && . fishros

使用上述指令进入安装程序并按照提示进行即可。

常用指令

指令学习思路

对于任意指令,学习的方式如下:

  • 使用参数--help查看参数说明
  • 使用官方Doc文档查阅指令说明
  • 实际上手测试指令效果

常用需掌握的指令主要包括如下命令:
Docker常用命令_第2张图片

Engine指令

docker version		# 显示Docker版本信息
docker info			# 显示Docker系统信息
docker --help		# 帮助手册

Images指令

docker images

用于按规定展示对应的镜像信息,指令用法如下:

docker images [OPTIONS] [REPOSITORY[:TAG]]	# 罗列本地镜像

常用[OPTIONS]:
-a, --all			# 显示所有镜像
-f, --filter		# 过滤符合条件的镜像(--filter "SIZE=100",过滤出大小高于100的镜像)
-q,	--auiet			# 仅显示镜像ID

也可指定显示镜像的[REPOSITORY[:TAG]],从而显示对应镜像,展现所有镜像如下:

$ docker images

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
<none>                    <none>              77af4d6b9913        19 hours ago        1.089 GB
committ                   latest              b6fa739cedf5        19 hours ago        1.089 GB
postgres                  9                   746b819f315e        4 days ago          213.4 MB
postgres                  9.3                 746b819f315e        4 days ago          213.4 MB

展示信息如下:

  • REPOSITORY:镜像仓库名
  • TAG:镜像标签(类似于Github中的分支Tag)
  • IMAGE ID:镜像ID,用于标识本地镜像
  • CREATED:镜像创建时间
  • SIZE:镜像大小

更多用法可参考官方手册:docker images指令

docker rmi

用于删除一个或多个镜像,指令用法如下:

docker rmi [OPTIONS] IMAGE [IMAGE...]

常用[OPTIONS]:
-f, --force		# 强制删除

删除镜像可以使用[REPOSITORY[:TAG]]或者IMAGE ID进行:

$ docker images

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
test1                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)

$ docker rmi fd484f19954f

Untagged: test1:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8

# 或者使用如下指令
$ docker rmi test1:latest

更多用法可参考官方手册:docker rmi指令

Registry指令

docker search

用于搜索dockerhub中是否存在对应的镜像包,指令用法如下:

docker search [OPTIONS] TERM

常用[OPTIONS]:
-f, --filter		# 过滤器

使用效果如下:

$ docker search busybox

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
busybox                          Busybox base image.                             316       [OK]
progrium/busybox                                                                 50                   [OK]
radial/busyboxplus               Full-chain, Internet enabled, busybox made...   8                    [OK]
odise/busybox-python                                                             2                    [OK]
azukiapp/busybox                 This image is meant to be used as the base...   2                    [OK]
ofayau/busybox-jvm               Prepare busybox to install a 32 bits JVM.       1                    [OK]
shingonoide/archlinux-busybox    Arch Linux, a lightweight and flexible Lin...   1                    [OK]
odise/busybox-curl                                                               1                    [OK]
ofayau/busybox-libc32            Busybox with 32 bits (and 64 bits) libs         1                    [OK]
peelsky/zulu-openjdk-busybox                                                     1                    [OK]
skomma/busybox-data              Docker image suitable for data volume cont...   1                    [OK]
elektritter/busybox-teamspeak    Lightweight teamspeak3 container based on...    1                    [OK]
socketplane/busybox                                                              1                    [OK]
oveits/docker-nginx-busybox      This is a tiny NginX docker image based on...   0                    [OK]
ggtools/busybox-ubuntu           Busybox ubuntu version with extra goodies       0                    [OK]
nikfoundas/busybox-confd         Minimal busybox based distribution of confd     0                    [OK]
openshift/busybox-http-app                                                       0                    [OK]
jllopis/busybox                                                                  0                    [OK]
swyckoff/busybox                                                                 0                    [OK]
powellquiring/busybox                                                            0                    [OK]
williamyeh/busybox-sh            Docker image for BusyBox's sh                   0                    [OK]
simplexsys/busybox-cli-powered   Docker busybox images, with a few often us...   0                    [OK]
fhisamoto/busybox-java           Busybox java                                    0                    [OK]
scottabernethy/busybox                                                           0                    [OK]
marclop/busybox-solr

更多用法可参考官方手册:docker search指令

docker pull

用于从仓库中下载指定的镜像,指令用法如下:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

常用[OPTIONS]:
-a, --all			# 拉取所有镜像

NAME[:TAG|@DIGEST]表示为需要下载的对应TAG的镜像,若不指定TAG则表示下载最新版本(latest):

$ docker pull debian

Using default tag: latest
latest: Pulling from library/debian
e756f3fdd6a3: Pull complete
Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510
Status: Downloaded newer image for debian:latest
docker.io/library/debian:latest

$ docker pull debian:bullseye

bullseye: Pulling from library/debian
Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510
Status: Downloaded newer image for debian:bullseye
docker.io/library/debian:bullseye

$ docker images

REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
debian       bullseye   4eacea30377a   8 days ago     124MB
debian       latest     4eacea30377a   8 days ago     124MB

更多用法可参考官方手册:docker pull指令

Container指令

docker run

用于创建一个容器并运行它,指令用法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用[OPTIONS]:
-d, --detach		# 后台运行容器并返回容器ID
-i					# 交互模式运行,通常和-t一起使用(-it)
-t					# 重新分配终端,通常和-i一起使用(-it)
-p					# 指定容器的端口映射,通常使用hostPort:containerPort进行描述(8080:8080)
--name				# 指定容器的名字

如下构建了一个名为test的容器,并使用交互方式启动:

$ docker run --name test -it debian

root@d6c0fe130dba:/# exit

更多用法可参考官方手册:docker run指令

docker ps

用于显示创建的容器,指令用法如下:

docker ps [OPTIONS]

常用[OPTIONS]:
-a, --all			# 展示所有容器而非默认的仅显示运行中的容器
-f, --filter		# 过滤器
-q, --quiet			# 仅显示容器ID

显示如下:

$ docker ps

CONTAINER ID        IMAGE                        COMMAND                CREATED              STATUS              PORTS               NAMES
4c01db0b339c        ubuntu:22.04                 bash                   17 seconds ago       Up 16 seconds       3300-3310/tcp       webapp
d7886598dbe2        crosbymichael/redis:latest   /redis-server --dir    33 minutes ago       Up 33 minutes       6379/tcp            redis,webapp/db

更多用法可参考官方手册:docker ps指令

docker start、docker restart、docker stop、docker kill

指令用法如下:

docker start [OPTIONS] CONTAINER [CONTAINER...] 	# 启动容器
docker restart [OPTIONS] CONTAINER [CONTAINER...] 	# 重启容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] 		# 停止容器
docker kill [OPTIONS] CONTAINER [CONTAINER...] 		# 停止容器

可使用NameCONTAINER ID启动容器,退出容器可以键入exit进行退出,此时容器将被关闭。也可以使用键盘按键Ctrl+P+Q进行退出,此时容器将在后台持续运行。

更多用法可参考官方手册:docker start指令、docker restart指令、docker stop指令、docker kill指令

docker rm

用于删除容器,指令用法如下:

docker rm [OPTIONS] CONTAINER [CONTAINER...]

常用[OPTIONS]:
-f, --force		# 强制删除

更多用法可参考官方手册:docker rm指令

docker exec和docker attach

用于进入后台运行中的容器,不同的是docker exec指令将重新开启一个新进程进入容器,docker attach则继续在现有进程中进入容器:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

常用[OPTIONS]:
-d, --detach		# 后台运行
-it					# 新建交互终端

docker attach CONTAINER

应注意,由于docker attach直接进入容器现有进程,在使用exit退出时容器将直接stop(若后台无运行)。而exec则新开一个进程,在使用exit退出时容器仅关闭当前进程。

更多用法可参考官方手册:docker exec指令、docker attach指令

docker logs和docker top

docker logs用于获取到容器的日志信息,docker top则获取容器的进程情况:

docker logs [OPTIONS] CONTAINER

常用[OPTIONS]:
--until		# 获取多少时间内的日志输出
--tail		# 后加数字表示显示多少条日志输出
docker top CONTAINER [ps OPTIONS]

示例如下:

$ docker run --name test -d busybox sh -c "while true; do $(echo date); sleep 1; done"

$ date

Tue 14 Nov 2017 16:40:00 CET

$ docker logs -f --until=2s test

Tue 14 Nov 2017 16:40:00 CET
Tue 14 Nov 2017 16:40:01 CET
Tue 14 Nov 2017 16:40:02 CET

$ docker top c8530dbbe3b4

UID		PID		PPID 	C 	STIME 	TTY 	TIME 		CMD
root 	27437	27421 	0 	16:43	? 		00:00:00	/bin/sh -c

更多用法可参考官方手册:docker logs指令、docker top指令

Host指令

docker cp

用于将容器内的数据复制到主机上,或者将主机上的数据复制至容器内,类似于scp

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

使用示例如下:

# 将本地文件上传容器
docker cp ./some_file CONTAINER:/work

# 将容器文件下载本地
docker cp CONTAINER:/var/logs/ /tmp/app_logs

更多用法可参考官方手册:docker cp指令

你可能感兴趣的:(docker)