主要概念:
- 镜像:模具(如:Java当中 类 就是模具,实例就是运行实体)
- 容器:运行的实体 --- 由镜像创建
- 仓库:仓库可看成一个代码控制中心,用来保存镜像。
- C / S 模式:客户端(Client端)-->宿主机、服务端(Service端)--->Docker引擎
- Docker Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure
- Docker 主机:物理机、虚拟机、等等。通过 Docker 的API命令来管理和创建Docker容器
主要参考网址:
- https://www.runoob.com/docker/docker-tutorial.html 菜鸟教程
- https://cloud.tencent.com/developer/article/1608809 ---> 换成国内源的方法
其他资源汇总:
略 --- 见 网址1
一、介绍、安装
Docker :
开源的,轻量级、可移植、基于 go 语言开发 的 应用容器引擎。遵从 Apache2.0 协议
完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app)。17.03版本之后有 社区CE版、企业EE版
应用场景:
- web 应用的自动化打包 和 发布
- 自动化测试 和 持续集成、发布
- 在服务型环境中部署和调整数据库或其他后台应用
- 。。。
安装:见 网址1--菜鸟教程
- 设置仓库(即,镜像源)
- 安装 Docker Engine-Community
- 其他:见网址2(远程仓库(中央仓库)、私服仓库等概念 类似 maven 的仓库概念)
- Docker 镜像加速器
- 换源(换至国内),下载速度更快
- 搭建私服仓库(将镜像存至私服。)
二、使用、命令
使用介绍:
在命令行输入docker
后回车,得到下面:(docker 的使用指南)
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string 客户端配置文件的位置 (default "/home/ubuntu/.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 启用调试模式
-H, --host list Daemon socket(s) to connect to
-l, --log-level string 设置日志级别("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string 仅由此CA签署的信任证书 (default "/home/ubuntu/.docker/ca.pem")
--tlscert string TLS证书文件的路径 (default "/home/ubuntu/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/home/ubuntu/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands: 一般用于Dockers集群
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 从 Dockerfile 文件生成镜像--image
commit Create a new image from a container's changes
cp 在容器和本地文件系统(即--宿主机)之间复制文件/文件夹
create Create a new container
diff 检查对 容器文件系统上 的文件或目录的更改
events Get real time events from the server
exec 进入正在运行的容器,使用此命令进入,退出后不会停止容器
export 将容器的文件系统导出为tar存档(即,导出容器快照到本地文件)
history Show the history of an image
images List images
import 通过快照来导入镜像
info Display system-wide information
inspect Return low-level information on Docker objects
kill kill掉一个或多个正在运行的容器
load 从tar存档或STDIN加载 镜像image
login Log in to a Docker registry
logout Log out from a Docker registry
logs 取回 一个容器的日志
pause 暂停一个或多个容器中的所有进程
port 列出端口映射或容器的特定映射
ps 列出容器列表
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename 重命名容器
restart 重启一个或多个容器
rm 删除一个或多个容器
rmi 删除一个或多个镜像
run 在新容器中运行命令(即,此命令会 1、创建新的容器,2、在此新的容器运行指定命令)
save 将一个或多个图像保存到tar存档(即,快照) (streamed to STDOUT by default)
search 在Docker Hub中搜索 images
start 启动一个或多个停止的容器
stats 显示容器资源使用统计信息的实时流
stop 停止一个或多个正在运行的容器
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top 显示容器的运行进程
unpause 与 unpause 命令相反。即---Unpause all processes within one or more containers
update 更新一个或多个容器的配置
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
1、基本使用:
使用格式:
docker [OPTIONS] COMMAND .....[OPTIONS参数等等]
使用方法:
- docker command --help :更深入的了解指定的 Docker 命令使用方法。
- 输入
docker
:可以查看 docker 的命令使用指南
**常见的命令: **
-
docker ps
输出的字段详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
CONTAINER ID IMAGE COMMAND ...
5917eac21c36 ubuntu:15.10 "/bin/sh -c 'while t…" ...
docker run [OPTIONS参数] 镜像名 启动的命令
docker logs 容器ID或容器名
docker start 容器id
docker stop <容器ID>
docker restart <容器 ID>
- 进入容器:
- docker attach
- docker exec :推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
常见的参数OPTION:
- -i :交互式操作。
- **-t **: 终端。
- -d:容器启动后会进入后台
- -P :将容器内部使用的网络端口随机映射到我们使用的主机上。
- -p :(小写的)(指定主机的指定端口)将容器内部使用的网络端口映射到我们使用的主机上指定端口
2、命令 --- 容器的使用
容器的
- 启动、新建、重启
- 进入容器
- 退出
- 停止
- 删除
- 导出 容器快照
- 导入 容器快照
- 查看容器的日志
见 “常见的命令” 或 网址1
3、命令 --- 镜像的使用
- 1、管理和使用本地 Docker 主机镜像
- 2、创建镜像
-
列出镜像:docker images
各个选项说明:
- REPOSITORY:表示镜像名
- TAG:镜像的标签(版本)
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
-
获取镜像:
dockers pull 镜像名:版本号
(如果不写 ":版本号",则默认最新版) -
搜索镜像:
docker search 镜像名
-
删除(本地)镜像:
docker rmi 镜像名
-
创建、构建 镜像:1、使用 Dockerfile 文件创建,2、直接拉取镜像源
-
更新镜像、设置镜像标签、等等
4、容器连接、互联
- 端口映射:见---常见的命令、常见的参数
- 映射到宿主机指定IP、指定端口、指定UDP或TCP(默认TCP)
- 容器互联:
- 容器命名
- 新建网络:
docker network create -d bridge test-net
- 配置DNS
5、命令 --- 仓库管理
-
注册(在默认中央仓库注册):在 https://hub.docker.com 免费注册一个 Docker 账号。
-
登录 和 退出 (中央仓库):在命令行中
docker login
、docker logout
-
推送镜像到自己的账号中:
docker push
(见---镜像的使用)以下命令中的 username 请替换为你的 Docker 账号用户名。
docker tag ubuntu:18.04 username/ubuntu:18.04
6、Dockerfile 文件 --- 构建镜像
在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:
FROM nginx # 定制一个 nginx 镜像
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html # 构建好的镜像内会有一个/usr/share/nginx/html/index.html 文件
Dockerfile 文件介绍:
-
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
-
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
-
shell 格式 :
RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。
-
exec 格式:
RUN ["可执行文件", "参数1", "参数2"] # 例如: # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
-
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz # 以上执行会创建 3 层镜像。可简化为以下格式(只会建一层): FROM centos RUN yum install wget && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" && tar -xvf redis.tar.gz
-
开始构建镜像:
构建命令:docker build -t nginx:test .
构建解释如下:
- nginx :起的镜像名
- test :镜像标签(版本)
- 点
.
:上下文路径(即,Dockerfile文件所在的位置),这里的点.
代表当前位置
Dockerfile 文件中的 指令详解: 详见 --- 网址1
- COPY、ADD、CMD、ENTRYPOINT、ENV、ARG、VOLUME、EXPOSE、WORKDRI、USER、HEALTHCHECK、ONBUILD 等等指令
- 其中:
- VOLUME:挂载数据卷(相当于 Docker 是操作系统, 数据卷是硬盘)
7、Docker Compose - 用于多容器
Compose 是用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
Compose 安装: 略!
Compose 使用: 详细见 --- 网址1
-
准备 ---> 建立指定目录(用于为使用Compose来建立系统的服务而用)
-
在目录中建立 requirements.txt 文件,内容如下: 声明要建立发服务(一个服务将使用一个容器)
flask redis
-
创建 docker-compose.yml 文件
在 Compose 文件定义了多个个服务:(如:web 和 redis )。
# yaml 配置 version: '3' services: # 在下面声明 服务的定义(包括各种服务的配置) web: build: . # 使用 当前目录中的 Dockerfile 文件定义镜像(Dockerfile文件的定义见上一小节-->二.6) ports: - "5000:5000" # 它将容器和主机绑定到暴露的端口 5000 redis: image: "redis:alpine" # 使用 Docker Hub 的公共 Redis 镜像。
yml 配置指令参考: 略 ---> 见 网址1
-
使用 Compose 命令 构建 和 运行 您的应用
在测试目录中,执行以下命令来启动应用程序:
docker-compose up
或者
docker-compose up -d 【# 如果你想在后台执行该服务可以加上 -d 参数
8、Docker Machine 管理虚拟主机
用于 管理的 docker 虚拟主机(自身物理机上安装的虚拟机、或 云服务器---实际上云服务器也是一种虚拟机)
作用如下:(下面所说的机器,实际也是指服务器)
- 给多台服务器安装 Docker
- 列出可用的机器(服务器)
- 创建机器(得准备好相应的服务器)--- 相当于将准备好的服务器加入到管理列表中
- 查看 服务器 IP
- 停止 服务器
- 启动 服务器
- 进入 服务器
docker-machine 命令参数说明: 略 --- 见 网址1
9、Docker Swarm 集群管理
Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
swarm 集群由管理节点(manager)和工作节点(work node)构成。
Docker Swarm 使用:
-
创建 swarm 集群管理节点(manager)
-
创建 swarm 集群工作节点(worker)
-
查看集群信息
-
部署服务到集群中
-
查看服务部署情况
-
扩展集群服务
-
删除服务
-
滚动升级服务
-
停止某个节点接收新的任务
三、Docker 命令大全
略 --- 见 网址1