docker学习之路
docker学习之路-1
docker概述
-
Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 能够将应用程序与基础设施分开,可以快速交付软件。使用Docker,可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法,可以显着减少编写代码和在生产中运行代码之间的延迟。
-
Docker 提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许在给定主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此无需依赖主机上当前安装的内容。可以在工作时轻松共享容器,并确保与共享的每个人都获得以相同方式工作的相同容器。
docker的架构
- Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。
![image]()
docker daemon
- Docker 守护进程 ( dockerd) 侦听 Docker API 请求并管理 Docker 对象,例如图像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。
docker client
- Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当使用诸如 docker run 之类的命令时,客户端会将这些命令发送到dockerd,从而执行它们。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。
docker registries
-
Docker仓库存储 Docker 镜像。Docker Hub 是一个任何人都可以使用的公共注册中心,Docker 默认配置为在 Docker Hub 上查找镜像。您甚至可以运行自己的仓库
-
当您使用docker pull或docker run命令时,所需的映像将从您配置的仓库中提取。当您使用该docker push命令时,您的映像会被推送到您配置的仓库中。
docker objects
- 当使用 Docker 时,是在创建和使用镜像、容器、网络、卷、插件和其他对象。
images
-
一个image是用于创建一个docke container(容器)的只读模板。通常,一个image基于另一个image,并带有一些额外的自定义。
-
您可以创建自己的image,也可以仅使用其他人创建并在registries中发布的image。要构建您自己的image,需要使用简单的语法创建一个Dockerfile,用于定义创建镜像和运行镜像所需的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层。当您更改 Dockerfile 并重建映像时,只会重建那些已更改的层。与其他虚拟化技术相比,这是使映像如此轻巧、小巧和快速的部分原因。
containers
-
容器container是镜像image的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新镜像。
-
默认情况下,容器与其他容器及其主机相对隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机之间的隔离程度。
-
容器由其镜像以及在创建或启动它时提供给它的任何配置选项定义。当容器被移除时,未存储在持久存储中的对其状态的任何更改都会消失。
docker的基本使用
运行容器
docker run -d -p 80:80 docker/getting-started
-d 以分离模式运行容器(在后台)
-p 80:80 - 将主机的 80 端口映射到容器中的 80 端口
docker/getting-started - 要使用的镜像
构建镜像
创建Dockerfile文件构建镜像
# syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
docker build -t getting-started .
-t 标志 命名镜像
. 表示dockerfile 在当前目录
操作容器
docker ps 获取容器ID
docker stop
docker rm
分享镜像
首先需要在 Docker Hub 上创建一个存储库
docker login -u YOUR-USER-NAME 登录到 Docker Hub
docker tag getting-started YOUR-USER-NAME/getting-started 使用该docker tag命令为getting-started图像指定一个新名称
docker push YOUR-USER-NAME/getting-started 推送命令
容器数据持久化
- 卷 volume
创建卷
docker volume create todo-db
挂载卷
docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
查看卷
docker volume inspect todo-db
- 绑定挂载
启动开发模式容器
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
-dp 3000:3000- 和之前一样。在分离(后台)模式下运行并创建端口映射
-w /app - 设置“工作目录”或命令将运行的当前目录
-v "$(pwd):/app"- 将容器中宿主机的当前目录绑定挂载到/app目录中
node:12-alpine- 要使用的图像。请注意,这是来自 Dockerfile 的应用程序的基本映像
sh -c "yarn install && yarn run dev"- 命令。我们正在使用sh(alpine 没有bash)启动一个 shell并运行yarn install以安装所有依赖项,然后运行yarn run dev. 如果我们查看package.json,我们将看到dev脚本正在启动nodemon
容器网络
创建网络
docker network create todo-app
启动容器连接网络
docker run -d
--network todo-app --network-alias mysql
-v todo-mysql-data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=secret
-e MYSQL_DATABASE=todos
mysql:5.7
-network 连接网络
--network-alias 在网络中容器的别名

浙公网安备 33010602011771号