0x2 Docker系列:Docker入门与实践

举报
我们都是云专家 发表于 2019/07/09 09:55:33 2019/07/09
【摘要】 Docker在13年被开源,变得越来越流行,Docker在微服务领域、云计算领域有着广泛的应用。这是为什么呢。任何技术的流行可能的原因有两点,一是能够解决大家的痛点,二是能够能够适应潮流.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架构

image.png

从这张图可以看出,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

案例实战

工程架构:

image.png

分为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/

显示界面如下:

image.png

说明

最近在全力学习k8s、paas等技术,如有相似的兴趣爱好者,可以加我微信miles02,加你入vip群。

9   参考资料

https://www.imooc.com/video/15735


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。