Docker是一开源的应用容器引擎,基于GO语言并遵循Apache2.0协议开源。

概述

简介

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

限制

Docker只能安装在CentOS6.5以及更高的版本,系统内核版本为2.6.32-431或者更高的本版。
可以通过命令查看系统信息和内核版本

1
sudo uname -a

或者

1
sudo uname -r

结果

1
Linux maiyikai.docker1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

安装Docker

参考Docker官网或者菜鸟教程

Docker三要素

  • 仓库:集中存放镜像的场所
  • 镜像:可以看作是一个只读模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器
  • 容器:是用镜像创建的运行实例

Docker指令

查看Docker帮助文档

1
2
3
4
5
6
7
8
#查看Docker版本
docker version

#查看Docker容器的描述
docker info

#查看Docker帮助文档
docker --help

####Docker指令
通过指令查看Docker支持的所有命令

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
[root@maiyikai ~]# docker --help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit

Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes

Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes

指令解析-镜像部分

镜像操作

指令:docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONNS
-a:查看所有镜像(默认包含中间层的image)
–digests:查看摘要
-f:显示满足条件的image
–format:按指定的模板返回
-h:查看帮助文档
–no-trunc:显示完整的image信息
-q:仅显示image的ID列表

指令实现

指令:docker images -a

1
2
3
4
5
6
7
8
9
10
11
[root@maiyikai ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
wurstmeister/kafka latest f1905dce9659 4 months ago 431MB
redis 6.0.0 96812ab2b931 4 months ago 104MB
rabbitmq latest c1a845de8052 4 months ago 151MB
mysql 8.0.20 a7a67c95e831 4 months ago 541MB
alpine latest f70734b6a266 4 months ago 5.61MB
openjdk 8u252-jdk 6cedfea72886 4 months ago 510MB
centos centos8 470671670cac 7 months ago 237MB
nginx 1.16.0 ae893c58d83f 13 months ago 109MB
webcenter/activemq latest 3af156432993 3 years ago 422MB

指令:docker images -q

1
2
3
4
5
6
7
8
9
f1905dce9659
96812ab2b931
c1a845de8052
a7a67c95e831
f70734b6a266
6cedfea72886
470671670cac
ae893c58d83f
3af156432993

指令:docker images --digests

1
2
3
4
5
6
7
8
9
10
REPOSITORY             TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
wurstmeister/kafka latest sha256:a9980b591efe62a68de0acf5f5ce2f6fa7112ab07ec1099c976cdadc740c7ea4 f1905dce9659 4 months ago 431MB
redis 6.0.0 sha256:9c2d321d367c582fc103ad36b7326a0edd5b558e0c987d0bea3b58bac008b20f 96812ab2b931 4 months ago 104MB
rabbitmq latest sha256:ed12b6ac5b5bd92dca3a313db094c1687ad169f8e8d32ce0fa9cfdcc8d8948bc c1a845de8052 4 months ago 151MB
mysql 8.0.20 sha256:61a2a33f4b8b4bc93b7b6b9e65e64044aaec594809f818aeffbff69a893d1944 a7a67c95e831 4 months ago 541MB
alpine latest sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54 f70734b6a266 4 months ago 5.61MB
openjdk 8u252-jdk sha256:bedfb494645a0f9c48d333544986d5301df950e31f71e8861b5ba1601aedc587 6cedfea72886 4 months ago 510MB
centos centos8 sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700 470671670cac 7 months ago 237MB
nginx 1.16.0 sha256:3e373fd5b8d41baeddc24be311c5c6929425c04cabf893b874ac09b72a798010 ae893c58d83f 13 months ago 109MB
webcenter/activemq latest sha256:35015988c4047a2ab1888466f5aae30420f7addde4c467e5db9ae64eea6b47b0 3af156432993 3 years ago 422MB

指令:docker images --no-trunc

1
2
3
4
5
6
7
8
9
10
REPOSITORY             TAG                 IMAGE ID                                                                  CREATED             SIZE
wurstmeister/kafka latest sha256:f1905dce96591909cf3fcc7c329fb2a3e02bb1bf9258f75fe5c9cd58d0d629ab 4 months ago 431MB
redis 6.0.0 sha256:96812ab2b9314569112fa58e7bef6641ff0a2b3cf7dace9ff8604a094f08228d 4 months ago 104MB
rabbitmq latest sha256:c1a845de80526fcab136f9fab5f839e91b98c475d1a2f72165a3d04f03edf4c7 4 months ago 151MB
mysql 8.0.20 sha256:a7a67c95e83189d60dd24cfeb13d9f235a95a7afd7749a7d09845f303fab239c 4 months ago 541MB
alpine latest sha256:f70734b6a266dcb5f44c383274821207885b549b75c8e119404917a61335981a 4 months ago 5.61MB
openjdk 8u252-jdk sha256:6cedfea7288615050ac395405eb42cc2ad9a1cc02c7fd53324993f27e4447f94 4 months ago 510MB
centos centos8 sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee 7 months ago 237MB
nginx 1.16.0 sha256:ae893c58d83fe2bd391fbec97f5576c9a34fea55b4ee9daf15feb9620b14b226 13 months ago 109MB
webcenter/activemq latest sha256:3af15643299345851f234d4e66a41b1d64b751b6ace09a9a4b05d658fe5cd7c1 3 years ago 422MB

指令:docker images --format "{{.ID}}:{{.Repository}}"

1
2
3
4
5
6
7
8
9
f1905dce9659:wurstmeister/kafka
96812ab2b931:redis
c1a845de8052:rabbitmq
a7a67c95e831:mysql
f70734b6a266:alpine
6cedfea72886:openjdk
470671670cac:centos
ae893c58d83f:nginx
3af156432993:webcenter/activemq

指令:docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

1
2
3
4
5
6
7
8
9
10
IMAGE ID            REPOSITORY             TAG
f1905dce9659 wurstmeister/kafka latest
96812ab2b931 redis 6.0.0
c1a845de8052 rabbitmq latest
a7a67c95e831 mysql 8.0.20
f70734b6a266 alpine latest
6cedfea72886 openjdk 8u252-jdk
470671670cac centos centos8
ae893c58d83f nginx 1.16.0
3af156432993 webcenter/activemq latest

查看镜像

指令:docker search [OPTIONS] TERM:从hub.docker仓库搜索指定的镜像
OPTIONS
–no-trunc:显示完整镜像信息
-s:查询STARS大于指定数量的镜像
–limit:显示指定数量的镜像信息
–automated:显示automated类型的镜像

指令实现

指令:docker search mysql --no-trunc

1
2
3
4
5
6
7
NAME                              DESCRIPTION                                                                                           STARS               OFFICIAL            AUTOMATED
mysql MySQL is a widely used, open-source relational database management system (RDBMS). 9942 [OK]
mariadb MariaDB is a community-developed fork of MySQL intended to remain free under the GNU GPL. 3636 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Created, maintained and supported by the MySQL team at Oracle 724 [OK]
percona Percona Server is a fork of the MySQL relational database management system created by Percona. 508 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 83
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Created by the MySQL team at Oracle 75

指令:docker search mysql -s 9000

1
2
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql MySQL is a widely used, open-source relation… 9942 [OK]

指令:docker search mysql --limit 2

1
2
3
NAME                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql MySQL is a widely used, open-source relation… 9942 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 724 [OK]

指令:docker search mysql --automated

1
2
3
4
5
6
7
8
9
10
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql/mysql-server Optimized MySQL Server Docker images. Create… 724 [OK]
centurylink/mysql Image containing mysql. Optimized to be link… 61 [OK]
bitnami/mysql Bitnami MySQL Docker Image 44 [OK]
deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r… 41 [OK]
prom/mysqld-exporter 31 [OK]
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 30 [OK]
arey/mysql-client Run a MySQL client from a docker container 14 [OK]
fradelg/mysql-cron-backup MySQL/MariaDB database backup using cron tas… 8 [OK]
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 2 [OK]

拉取镜像

指令:docker pull NAME[:TAG]:如果没有TAG则拉取latest版本的镜像

镜像删除

指令:docker rmi [OPTIONS] IMAGE [IMAGE...]:删除指定的镜像文件
指令:docker rmi -f ${docker images -qa}
OPTIONS
-f:强制删除

指令解析-容器部分

容器操作-创建容器

指令:docker run [OPTIONS] image [COMMAND] [ARGS...]
OPTIONS
–name=”Name”:指定容器名称
-d:后台运行容器,并返回容器ID,即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机端口映射
-p:指定端口,有四种模式
ip:hostPort:containerPort
ip:cantainerPort
hostPort:containerPort
cantainerPort

查询容器

指令:docker ps [OPTIONS]:查看正在运行的docker容器
OPTIONS
-a:查看所有正在运行的docker容器+历史运行的docker容器
–format:按指定格式查看
-n:查看指定数量的最近运行的docker容器
-l:显示最近创建的docker容器
-q:静默模式,只显示容器编号
-s:显示容器大小
–no-trunc:显示容器完整信息

启动容器

指令:docker start Name|ID

关闭容器

指令:docker restart Name|ID

强制关闭

指令:docker kill Name|ID

重启容器

指令:docker restart Name|ID

进入容器

指令:docker attach Name|ID
指令:docker exec -it Name|ID
指令:docker exec -t Name|ID [ls -l]:不进入容器,但让容器执行指令

退出容器

指令:exit:退出并关闭容器
快捷键:Ctrl+Q+P,退出容器,但不关闭容器

删除容器

指令:docker rm -f Name|ID
指令:docker rm -f ${docker ps -qa}:删除所有

查看容器日志

指令:docker logs [OPTIONS] Name|ID
OPTIONS
-t:显示日志时间戳
-f:显示最新的日志
–tail:显示最后指定行数的日志

查看容器内部运行的进程

指令:docker top Name|ID

查看容器内部细节

指令:docker inspect Name|ID

Docker容器文件拷贝到宿主机

指令:docker cp Name|ID:容器内部路径 宿主机路径

通过容器创建镜像

通过对原有容器的改造,优化为自己的容器,并将容器打包为一个镜像

指令:docker commit -m="提交的描述信息" -a="作者" NewName[:TAG]

Docker容器与宿主机文件共享

指令:docker run -it -v 宿主机绝对路径(目录):容器绝对路径(目录) imageNmae

Docker容器与宿主机文件共享(设置只读权限)

指令:docker run -it -v 宿主机绝对路径(目录):容器绝对路径(目录):ro imageNmae

不同镜像的继承,数据共享

不同镜像之间的继承,共享文件系统,对某一个容器内的文件进行操作,都将会进行同步。但如果删除其中的某一个容器,不会影响其他容器的文件

1
2
3
docker run -it --name="docker1" imageName
docker run -it --name="docker2" --volume-from="docker1" imageName
docker run -it --name="docker3" --volume-from="docker1" imageName

总结

对于容器的操作有很多,这边只是对个别操作进行展示。
多练,多记…

最后更新: 2020年09月08日 22:45

原始链接: https://maiyikai.github.io/2020/09/09/1582786565/

× ~谢谢大爷~
打赏二维码