0x2 Docker系列:Docker入门与实践
作者:云享专家——方志朋
1 Docker简介
Docker是容器技术的一个代表,容器的技术从本质上讲是程序打包、隔离的技术,不是一个很新的技术,核心的技术在内核中已经存在很久了。但容器技术被大众所用,变成这么流行,这么火爆的技术是因为Docker。Docker在13年被开源,变得越来越流行,Docker在微服务领域、云计算领域有着广泛的应用。这是为什么呢。任何技术的流行可能的原因有两点,一是能够解决大家的痛点,二是能够能够适应潮流.docker理顺了软件包的问题,有了docker运行一个镜像是非常容易的,不需要做各种环境的配置。
什么是Docker?官方的解释如下:
an open resource project to pack,ship and run any application as a lightweght containner.
Build, Manage and Secure Your Apps Anywhere. Your Way.
可以粗糙的认为是一个轻量级的虚拟机,因为在某种程度上来讲,docker和虚拟机是有非常多的相似点。它们都是讲应用放在相对独立的环境里,调度主机的内核来运行。但Docker确实不是虚拟机,这张图是虚拟机和Docker的对比图,左边这张图是虚拟机,右边是Docker,左边的虚拟机子宿主机上有一层Hypervisor虚拟层,虚拟出了硬件和设备,在虚拟层上面会安装GuestOs,然后再运行各种各样的程序,docker 是不一样的,docker是不一样的,它在宿主机上有一个Docker engine,然后再运行各种各样的应用程序。因为它没有虚拟机层,它会比虚拟机轻量很多,包括程序运行速度也非常的快。
Docker为何这么火?天时地利人和。Docker 不是什么新技术,Docker的镜像版本管理是其火的根本原因。
2 Docker安装
Centos安装:
1. 安装:
2. yum search docker
3. yum -y install docker-io
4.
5. 查看基本信息:docker info
6. 启动:servie start docker
3 Docker架构
从这张图可以看出,Docker的架构是非常简答的。中间是Host,上面装了一个Docker daemon的守护进程,守护进程应用做很多docker的操作,那么谁让 docker daemon来做这些操作呢,是最左边client,比如我们再终端操作输入dokcer的命令,客户端讲命令发送给docker守护进程,让docker去做一些操作,比如从最右边的镜像仓库拉取镜像到宿主机上,然后在宿主机上跑镜像,运行容器。
4 常见的Docker命令
1. docker run -p 80:80 -d docker.io/nginx
2. docker cp index.html containerId://usr/share/nginx/html
3. docker exec -it containeId /bin/bash
4. docker images
5. docker ps [-a -q]
6. docker stop containerId
7. docker rm containerId
8. docker rmi imagesId
9.
10. docker commit –m ’msg’ containerId [name]
11. docker build
12. docker pull
13. docker push
14. docker login
5 Dockerfile
常用命令
命令 | 用途 |
WORKDIR | RUN ENTRYPINT CMD执行的工作目录 |
ENV | 添加环境变量 |
ADD | 添加文件,会解压压缩包 |
COPY | 复制文件 |
ONBUILD | 触发器 |
VOLUME | 挂载卷 |
FROM | 基础镜像 |
ENTRYPOINT | 基础命令 |
RUN | 执行命令 |
CMD | 启动程序命令,拼接在基础命令后 |
EXPOSE | 暴露端口 |
MAINTAINER | 维护者 |
如果不理解可以参考博客https://www.cnblogs.com/51kata/category/789766.html
第一个Dockerfile
1. FROM alpine:latest
2. MAINTAINER fzp
3. CMD echo 'hello docker'
这个镜像的基础镜像是alpine:latest,所有者是fzp,容器启动的时候会执行echo命令。
执行:
1. docker build -t hello-img .
2.
3. docker run hello-img
控制台输出: hello docker
第二个Dockerfile
1. FROM ubuntu
2. MAINTAINER fzp
3. RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
4. RUN apt-get update
5. RUN apt-get install -y nginx
6. COPY index.html /var/www/html
7. ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
8. EXPOSE 80
这个镜像稍微复杂点,基础镜像是ubuntu,镜像所属者fzp,再一下一层是设置镜像加速的地址。将index.html拷贝到镜像的目录下。最后以前台进程的形式启动。
index.html
1. today i'm happy
执行命令:
1. docker build -t forezp/hello.nginx .
2.
3. docker run forezp/hello.nginx
curl localhost
控制台输出:today i'm happy
6 Docker存储
独立于容器之后的独立化存储
第一种方式:
1. docker run -p 80:80 -d -v $PWD/code:/var/www/html nginx
-v指令 宿主的路径:容器路径
将容器的路径的文件夹或者文件挂载到宿主机的路径。
第二种方式:
docker run -volumes-from ...
1. docker create -v $PWD/data:/var/mydata --name data_container ubuntu
2.
3. docker run -it --volumes-from data_container ubuntu /bin/bash
4.
5. cd /var/mydata
6.
7. touch what.txt
8.
9. exit
10.
11. cd data
12.
13. ls
可以查看宿主机的data目录有what.txt文件
7 镜像仓库
Regiestry,使用官方的docker hub。
1. docker search whalesay
2.
3. docker pull dokcer/whalesay
4.
5. docker run dokcer/whalesay cowsay docker is fun
6.
7. docker tag dokcer/whalesay forezp/whalesay
8.
9. dcoker push forezp/whalesay
10.
11. docker login
8 Docker Compose
docker compose是Docker 官方的一个容器编排工具,现在以一个简单的搭建博客的例子来讲解。
安装
所以的例子都是在linux系统下完成的,docker compose在linux下的安装:
1. curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2. chmod a+x /usr/local/bin/docker-compose
验证安装成了没:
1. docker-compose --version
Docker Compse常用命令
· docker-compose build
· docker-compose up
· docker-compose stop
· docker-compose rm
案例实战
工程架构:
分为3个容器,最外层一个服务为ngixn,下一层服务为ghost app,最底层容器是Mysql
在工作目录ghost下,有三个文件夹分别为ngix、ghost、db和一个docker-compose.yml文件,目录结构为:
1. -ghost
2. - nginx
3. - Dockerfile
4. - nginx.conf
5. - ghost
6. - Dockerfile
7. - config.js
8. - db
9. - docker-compose.yml
docker-compose.yml编写
1. version: '2'
2. networks:
3. ghost:
4. services:
5. ghost-app:
6. build: ghost
7. networks:
8. - ghost
9. depends_on:
10. - db
11. ports:
12. - "2368:2368"
13. nginx:
14. build: nginx
15. networks:
16. - ghost
17. depends_on:
18. - ghost-app
19. ports:
20. - "80:80"
21. db:
22. image: "mysql:5.7.15"
23. networks:
24. - ghost
25. environment:
26. MYSQL_ROOT_PASSWORD: mysqlroot
27. MYSQL_USER: ghost
28. MYSQL_PASSWORD: ghost
29. volumes:
30. - $PWD/data:/var/lib/mysql
31. ports:
32. - "3306:3306"
nginx相关
dockerfile编写:
1. FROM nginx
2. COPY nginx.conf /etc/nginx/nginx.conf
3. EXPOSE 80
配置文件文件编写nginx.conf
1. worker_processes 4;
2. events {
3. worker_connections 1024;
4. }
5. http {
6. server {
7. listen 80;
8. location / {
9. proxy_pass http://ghost-app:2368;
10. }
11. }
12. }
ghost app相关
Dockerfile编写:
1. FROM ghost
2. COPY ./config.js /var/lib/ghost/config.js
3. EXPOSE 2368
配置文件config.js:
1. var path = require('path'),
2. config;
3. config = {
4. production: {
5. url: 'http://mytestblog.com',
6. mail: {},
7. database: {
8. client: 'mysql',
9. connection: {
10. host: 'db',
11. user: 'ghost',
12. password: 'ghost',
13. database: 'ghost',
14. port: '3306',
15. charset: 'utf8'
16. },
17. debug: false
18. },
19. paths: {
20. contentPath: path.join(process.env.GHOST_CONTENT,'/')
21. },
22. server: {
23. host: '0.0.0.0',
24. port: '2368'
25. }
26. }
27. };
28. module.exports = config;
docker-compose打镜像,打完镜像之后运行.
1. docker-compose buid
2. docker-compose up
运行之后在浏览器访问:http://119.23.221.204/
显示界面如下:
说明
最近在全力学习k8s、paas等技术,如有相似的兴趣爱好者,可以加我微信miles02,加你入vip群。
9 参考资料
https://www.imooc.com/video/15735
- 点赞
- 收藏
- 关注作者
评论(0)