Docker入门与实践

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的镜像版本管理是其火的根本原因。

Docker安装

Centos安装:

  1. 安装:

  2. yum search docker

  3. yum -y install docker-io

  4. 查看基本信息:docker info

  5. 启动:servie start docker

Docker架构

从这张图可以看出,Docker的架构是非常简答的。中间是Host,上面装了一个Docker daemon的守护进程,守护进程应用做很多docker的操作,那么谁让 docker daemon来做这些操作呢,是最左边client,比如我们再终端操作输入dokcer的命令,客户端讲命令发送给docker守护进程,让docker去做一些操作,比如从最右边的镜像仓库拉取镜像到宿主机上,然后在宿主机上跑镜像,运行容器。

常见的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. docker commit –m ’msg’ containerId [name]

  10. docker build

  11. docker pull

  12. docker push

  13. docker login

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. 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. docker run forezp/hello.nginx

curl localhost

控制台输出:today i'm happy

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. docker run -it --volumes-from data_container ubuntu /bin/bash

  3. cd /var/mydata

  4. touch what.txt

  5. exit

  6. cd data

  7. ls

可以查看宿主机的data目录有what.txt文件

镜像仓库

Regiestry,使用官方的docker hub。

  1. docker search whalesay

  2. docker pull dokcer/whalesay

  3. docker run dokcer/whalesay cowsay docker is fun

  4. docker tag dokcer/whalesay forezp/whalesay

  5. dcoker push forezp/whalesay

  6. docker login

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值