docker自动化部署

docker使用方法窥探

Posted by Xshellv on 2021-07-23

Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

Docker图解工作流程

Client(Docker客户端)

Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon 通信。可执行 docker build 等相关命令。

镜像(Image)

镜像(Image),就相当于是一个root文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的root 文件系统。

容器(Container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository)

仓库可看成一个代码控制中心,用来保存镜像。Docker Hub提供了庞大的镜像集合供使用。一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Docker安装

这里直接跳过,安装比较简单,直接看菜鸟Docker安装就行了。如果输入以下命令能看到Docker的版本就表示成功了。

1
2
$ docker --version
Docker version 17.09.1-ce, build 19e2cf6

Docker常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 拉取官方镜像
docker pull nginx

# 查看进程
docker ps
docker ps -a // 查看全部

# 伪终端ff6容器的uuid
# -t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
# -i则让容器的标准输入保持打开
docker exec -it ff6 /bin/bash

# 停止
docker stop ff6

# 删除镜像
docker rm ff6

构建Nginx和Node.js的Docker镜像

Nginx部署

1
2
3
4
5
6
7
8
9
# Dockerfile
FROM nginx:latest
RUN echo '<h1>Hello,Docker!</h1>' > /usr/share/nginx/html/index.html

# 定制镜像
docker build -t mynginx .
# 运行
# -d 守护态运行
docker run -p 80:80 -d mynginx

Nodejs部署

1、定制一个程序NodeJS镜像(package.json 的配置这里不放了)

1
2
npm init -y 
npm i koa -s

2、app.js启动一个服务

1
2
3
4
5
6
7
8
9
10
11
// app.js 
const Koa = require('koa');
const app = new Koa();

app.use(ctx => {
ctx.body = ' Hello Docker'
})

app.listen(3000, () => {
console.log('app started at http://localhost:3000/')
})

3、制定node镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Dockerfile 
# 制定node镜像的版本
FROM node:10-alpine

# 移动当前目录下面的文件到app目录下
ADD . /app/

# 进入到 app 目录下面,类似cd
WORKDIR /app

# 安装依赖
RUN npm install

# 对外暴露的端口
EXPOSE 3000

# 程序启动脚本
CMD ["node","app.js"]

4、定制镜像

1
2
3
4
# 定制镜像
docker build -t mynode .
# 运行
docker run -p 3000:3000 -d mynode

参考文章