文章目录
1 Docker Compose
官方文档:https://docs.docker.com/compose/install/
1.1 简介
定义、运行多个容器
YAML file配置文件
single command 命令有哪些
作用:批量容器编排
Compose
version: '2.0'
services:
web:
build:.
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
1.2 安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内镜像
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权
sudo chmod +x /usr/local/bin/docker-compose
1.3 yaml规则
https://docs.docker.com/compose/compose-file/compose-file-v3/
# 3层
version: ' ' # 版本
services: # 服务
服务1:web
# 服务配置
images
build
network
...
服务2:redis
...
服务2:redis
...
# 其他配置 网路/卷、全局规则
volumes:
networks:
configs:
2 官方 实战 flask
2.1 创建项目文件
https://docs.docker.com/compose/gettingstarted/
1、创建项目
mkdir /home/composetest
cd /home/compose
2、创建 app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
3、requirements.txt
flask
redis
2.2 创建Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.8-alpine
ADD . /code
WORKDIR /code
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
从 Python 3.7 映像开始构建映像。
将工作目录设置为/code.
设置命令使用的环境变量flask。
安装 gcc 和其他依赖项
复制requirements.txt并安装 Python 依赖项。
向镜像添加元数据以描述容器正在侦听端口 5000
将项目中的当前目录复制.到镜像中的workdir .。
将容器的默认命令设置为flask run.
2.3 在Compose文件中定义service
vim docker-compose.yml
version: "3.3"
services:
web:
build: . # 自己构建镜像
ports:
- "5000:5000"
redis:
image: "redis:alpine" # 拉取镜像
2.4 Build and run your app with Compose
构建并运行
docker-compose up
构建并运行 – 重构
docker-compose up --build
构建并运行 - - 重构 - 后台运行
docker-compose up --build -d
停止:
docker-compose down
docker-compose
以前都是单个docker run 启动容器
docker-compose 通过docker-compose编写yaml配置文件、可以通过compose 一键启动所有服务,停止
3 实战 博客 wordpress
https://docs.docker.com/samples/wordpress/
mkdir my_wordpress
cd my_wordpress
3.1 docker-compose.yml
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
启动
docker-compose up
4 实战 spring-boot
4.1 编辑代码

勾选依赖
Web -> Spring Web
NoSQL -> Spring Data Redis
application.properties
server.port=8080
spring.redis.host=redis
HelloController.java
package com.example.springboot.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello charles";
}
}
打包项目

4.2 编辑dokcer文件
Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
docker-compose.yml
编排项目
version: '3.3'
services:
vitcloud-spring-demo:
build: .
# dockerfile: Dockerfile # 指定Dokcerfile
image: spring-demo-images
depends_on:
- redis
ports:
- "8080:8080" # 外部地址:内部地址
redis:
# image:"library/redis:alpine"
image: redis
4.3 启动项目
丢到服务器
- demo-0.0.1-SNAPSHOT.jar
- docker-compose.yml
- Dockerfile
启动
docker-compose up
docker-compose up --build -d
--build
:重新构建
-d
:后台模式
学习地址
狂神说:https://www.bilibili.com/video/BV1kv411q7Qc
<p><h3>文章目录</h3><ul><ul><li><a href="#1_Docker_Compose_2">1 Docker Compose</a></li><ul><li><a href="#11__4">1.1 简介</a></li><li><a href="#12__34">1.2 安装</a></li><li><a href="#13_yaml_48">1.3 yaml规则</a></li></ul><li><a href="#2___flask_72">2 官方 实战 flask</a></li><ul><li><a href="#21__73">2.1 创建项目文件</a></li><li><a href="#22_Dockerfile_116">2.2 创建`Dockerfile`</a></li><li><a href="#23_Composeservice_135">2.3 在Compose文件中定义service</a></li><li><a href="#24_Build_and_run_your_app_with_Compose_152">2.4 Build and run your app with Compose</a></li></ul><li><a href="#3___wordpress_178">3 实战 博客 wordpress</a></li><ul><li><a href="#31_dockercomposeyml_186">3.1 `docker-compose.yml`</a></li></ul><li><a href="#4__springboot_227">4 实战 spring-boot</a></li><ul><li><a href="#41__228">4.1 编辑代码</a></li><li><a href="#42_dokcer_262">4.2 编辑dokcer文件</a></li><li><a href="#43__294">4.3 启动项目</a></li></ul></ul></ul></p>
<h2><a id="1_Docker_Compose_2"></a>1 Docker Compose</h2>
<p>官方文档:https://docs.docker.com/compose/install/</p>
<h3><a id="11__4"></a>1.1 简介</h3>
<p>定义、运行多个容器</p>
<p>YAML file配置文件</p>
<p>single command 命令有哪些</p>
<p>作用:批量容器编排</p>
<p>Compose</p>
<pre><div class="hljs"><code class="lang-shell">version: '2.0'
services:
web:
build:.
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
</code></div></pre>
<h3><a id="12__34"></a>1.2 安装</h3>
<pre><div class="hljs"><code class="lang-shell">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
<span class="hljs-meta">
# </span><span class="language-bash">国内镜像</span>
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
</code></div></pre>
<p>授权</p>
<pre><div class="hljs"><code class="lang-shell">sudo chmod +x /usr/local/bin/docker-compose
</code></div></pre>
<h3><a id="13_yaml_48"></a>1.3 yaml规则</h3>
<p>https://docs.docker.com/compose/compose-file/compose-file-v3/</p>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">3层</span>
version: ' ' # 版本
services: # 服务
服务1:web
<span class="hljs-meta"> # </span><span class="language-bash">服务配置</span>
images
build
network
...
服务2:redis
...
服务2:redis
...
<span class="hljs-meta"># </span><span class="language-bash">其他配置 网路/卷、全局规则</span>
volumes:
networks:
configs:
</code></div></pre>
<h2><a id="2___flask_72"></a>2 官方 实战 flask</h2>
<h3><a id="21__73"></a>2.1 创建项目文件</h3>
<p>https://docs.docker.com/compose/gettingstarted/<br />
1、创建项目</p>
<pre><div class="hljs"><code class="lang-shell">mkdir /home/composetest
cd /home/compose
</code></div></pre>
<p>2、创建 <code>app.py</code></p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> time
<span class="hljs-keyword">import</span> redis
<span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask
app = Flask(__name__)
cache = redis.Redis(host=<span class="hljs-string">'redis'</span>, port=<span class="hljs-number">6379</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_hit_count</span>():
retries = <span class="hljs-number">5</span>
<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
<span class="hljs-keyword">try</span>:
<span class="hljs-keyword">return</span> cache.incr(<span class="hljs-string">'hits'</span>)
<span class="hljs-keyword">except</span> redis.exceptions.ConnectionError <span class="hljs-keyword">as</span> exc:
<span class="hljs-keyword">if</span> retries == <span class="hljs-number">0</span>:
<span class="hljs-keyword">raise</span> exc
retries -= <span class="hljs-number">1</span>
time.sleep(<span class="hljs-number">0.5</span>)
<span class="hljs-meta">@app.route(<span class="hljs-params"><span class="hljs-string">'/'</span></span>)</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">hello</span>():
count = get_hit_count()
<span class="hljs-keyword">return</span> <span class="hljs-string">'Hello World! I have been seen {} times.\n'</span>.<span class="hljs-built_in">format</span>(count)
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
app.run(host=<span class="hljs-string">"0.0.0.0"</span>, debug=<span class="hljs-literal">True</span>)
</code></div></pre>
<p>3、<code>requirements.txt</code></p>
<pre><div class="hljs"><code class="lang-shell">flask
redis
</code></div></pre>
<h3><a id="22_Dockerfile_116"></a>2.2 创建<code>Dockerfile</code></h3>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">syntax=docker/dockerfile:1</span>
FROM python:3.8-alpine
ADD . /code
WORKDIR /code
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
</code></div></pre>
<ul>
<li><code>从 Python 3.7 映像开始构建映像。</code></li>
<li><code>将工作目录设置为/code.</code></li>
<li><code>设置命令使用的环境变量flask。</code></li>
<li><code>安装 gcc 和其他依赖项</code></li>
<li><code>复制requirements.txt并安装 Python 依赖项。</code></li>
<li><code>向镜像添加元数据以描述容器正在侦听端口 5000</code></li>
<li><code>将项目中的当前目录复制.到镜像中的workdir .。</code></li>
<li><code>将容器的默认命令设置为flask run.</code></li>
</ul>
<h3><a id="23_Composeservice_135"></a>2.3 在Compose文件中定义service</h3>
<pre><div class="hljs"><code class="lang-shell">vim docker-compose.yml
</code></div></pre>
<pre><div class="hljs"><code class="lang-shell">version: "3.3"
services:
web:
build: . # 自己构建镜像
ports:
- "5000:5000"
redis:
image: "redis:alpine" # 拉取镜像
</code></div></pre>
<h3><a id="24_Build_and_run_your_app_with_Compose_152"></a>2.4 Build and run your app with Compose</h3>
<p>构建并运行</p>
<pre><div class="hljs"><code class="lang-shell">docker-compose up
</code></div></pre>
<p>构建并运行 – 重构</p>
<pre><div class="hljs"><code class="lang-shell">docker-compose up --build
</code></div></pre>
<p>构建并运行 - - 重构 - 后台运行</p>
<pre><div class="hljs"><code class="lang-shell">docker-compose up --build -d
</code></div></pre>
<p>停止:</p>
<pre><div class="hljs"><code class="lang-shell">docker-compose down
</code></div></pre>
<p>docker-compose<br />
以前都是单个docker run 启动容器<br />
docker-compose 通过docker-compose编写yaml配置文件、可以通过compose 一键启动所有服务,停止</p>
<h2><a id="3___wordpress_178"></a>3 实战 博客 wordpress</h2>
<p>https://docs.docker.com/samples/wordpress/</p>
<pre><div class="hljs"><code class="lang-shell">mkdir my_wordpress
cd my_wordpress
</code></div></pre>
<h3><a id="31_dockercomposeyml_186"></a>3.1 <code>docker-compose.yml</code></h3>
<pre><div class="hljs"><code class="lang-shell">version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
</code></div></pre>
<p>启动</p>
<pre><div class="hljs"><code class="lang-shell">docker-compose up
</code></div></pre>
<h2><a id="4__springboot_227"></a>4 实战 spring-boot</h2>
<h3><a id="41__228"></a>4.1 编辑代码</h3>
<p><img src="https://static.couragesteak.com/article/e9f961205066156b20910ac2ce5f6dae.png" alt="cc35d3f834f547f7891908ea572a0a99.png" /></p>
<p>勾选依赖<br />
Web -> Spring Web<br />
NoSQL -> Spring Data Redis</p>
<p><code>application.properties</code></p>
<pre><code class="lang-powershell">server.port=8080
spring.redis.host=redis
</code></pre>
<p><code>HelloController.java</code></p>
<pre><code class="lang-powershell">package com.example.springboot.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello charles";
}
}
</code></pre>
<p>打包项目</p>
<p><img src="https://static.couragesteak.com/article/85554ee2df5a1de86400313954750e10.png" alt="8772cfb2745a400cb8f679f2bc35f473.png" /></p>
<h3><a id="42_dokcer_262"></a>4.2 编辑dokcer文件</h3>
<p><code>Dockerfile</code></p>
<pre><code class="lang-powershell">FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
</code></pre>
<p><code>docker-compose.yml</code><br />
编排项目</p>
<pre><code class="lang-powershell">version: '3.3'
services:
vitcloud-spring-demo:
build: .
# dockerfile: Dockerfile # 指定Dokcerfile
image: spring-demo-images
depends_on:
- redis
ports:
- "8080:8080" # 外部地址:内部地址
redis:
# image:"library/redis:alpine"
image: redis
</code></pre>
<h3><a id="43__294"></a>4.3 启动项目</h3>
<p>丢到服务器</p>
<ul>
<li>demo-0.0.1-SNAPSHOT.jar</li>
<li>docker-compose.yml</li>
<li>Dockerfile</li>
</ul>
<p>启动</p>
<pre><code class="lang-powershell">docker-compose up
</code></pre>
<pre><code class="lang-powershell">docker-compose up --build -d
</code></pre>
<p><code>--build</code>:重新构建<br />
<code>-d</code>:后台模式</p>
<p>学习地址<br />
狂神说:https://www.bilibili.com/video/BV1kv411q7Qc</p>
留言