Docker入门

一、简介

1、课程介绍

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,是容器技术的一个代表,将程序进行隔离从而打包的一个技术,是云计算广泛应用的技术

这篇文章是面向用户的,适合对Docker感兴趣的开发,测试,运维,需要有以下预备知识:

  • Linux命令行
  • bash

下面是这篇文章的总览:

  • Docker简介
  • Registry
  • 镜像与容器
  • 多容器app
  • 容器存储

2、Docker介绍

         从类比的角度,可以粗糙地理解为轻量级别的虚拟机或开挂的chroot,但它不是虚拟机

 3、Docker mac安装

        通常,安装分为三部:

  • 下载
  • 安装
  • 配置

(1)下载

 也可以选择其它系统进行下载;

(2)安装

可以在控制台输入:docker info,出现如下信息就证明已经运行了 

(3)配置

 基本上不需要做什么配置,唯一可能值得注意的是docker会去拖取很多镜像,比较慢,我们可以做一个加速的环节,添加加速地址,这个地址自行百度怎么获取

 4、Docker linux安装

        这里需要使用两个命令

        (1)sudo wget -qO- https://get.docker.com/ | sh

 可能会需要一点时间,会根据本地的Linux版本去安装适合的Docker版本

        (2) sudo usermod -aG docker 用户名

 然后使用docker info来查看信息:

 5、Windows安装(超简单)

 二、docker架构介绍与实战

1、架构

 下面是中文版的架构图:

 2、实战

1、运行docker

         首先查看docker进程是否运行;

        运行:docker run nginx

        说明本地没有这个镜像,通过docker images查看镜像,果然没有:

        这时需要修改文件:

        (1)进入文件夹d /etc/docker/ 

        (2)创建文件:touch daemon.json,编辑内容

                 vi daemon.json,内容如下:

                {
                "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
                }

                保存退出后,执行:systemctl daemon-reloadsystemctl restart docker
       

                然后再次运行:docker run nginx,会从远程下载

 再次查看:

再次运行:

还可以这样运行(本地8080端口开启nginx服务,允许容器返回结果):

 如果有兴趣,也可以在Linux上配置nginx(没兴趣忽略):

  (1)linux安装一下这个nginx镜像:

(2)按照下列步配置nginx:

         出现下面画面就配置成功:

 2、常规操作

         首先,介绍一个概念,container是images的示例,即images是模板

         (1)查看容器输入:docker ps

         (2)停止容器输入:docker stop 容器id

        (3)查看镜像输入:docker images

        (4)从容器创建一个新的镜像:docker commit -m '备注'  容器id 新镜像名

        (5)删除镜像输入:docker rmi 镜像id

        (6)查看所有容器:docker ps -a

        (7)去除容器:docker rm 容器id

 

 3、命令小结

        docker pull:获取image

        docker build:创建image

        docker images:列出image

        docker run:运行container

        docker ps:列出container

        docker rm:删除container

        docker rmi:删除image

        docker cp:在host和container之间拷贝文件

        docker commint:保存改动为新的image

三、Dockerfile介绍

1、Dockerfile介绍

        通过编写简单的文件自创docker镜像

        第一个Dockerfile,内容如下:

        FROM alpine:latest

        MAINTAINER xbf

        CMD echo 'hello docker'

        (1)创建Dockerfile

        首先通过touch Dockerfile创建,然后输入以上内容保存后进行查看:

        

         (2)创建镜像

        通过:docker build -t hello_docker . 创建docker

 

         (3)查看镜像:

        通过docker images查看镜像

 通过docker images我们可以发现,已经有了hello_docker镜像

        (4)运行镜像

通过docker run hello_docker运行镜像

 2、Dockerfile实战

        (1)创建一个Dockerfile

        内容如下:

        FROM ubuntu

        MAINTAINER xbf

        Run sed -i 's/archive.ubuntu.com/mirros.ustc.edu.cn/g' /etc/apt/sources.list

        RUN apt-get update

        RUN apt-get install -y nginx

        COPY index.html /var/www/html

        ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]

        EXPOSE 80

         (2)准备一下index.html

        touch index.html,vi index.html,随便填点内容: 

        (3)构建镜像

        构建前安装nginx:

        yum install epel-release

        yum -y install nginx

        然后构建镜像:

        docker build -t xbf/hello-nginx .

 (4)查看镜像,运行容器

         此时已经有了镜像,并产生了一个容器

        如果80端口被分配了,可以这样操作:

        最后运行localhost看看index.html是否生效

 

 (5)Dockerfile语法总结

        FROM:base image

        RUN:执行命令

        ADD:添加文件

        COPY:拷贝文件

        CMD:执行命令

        EXPOSE:暴露端口

        WORKDIR:指定路径

        MAINTAINER:维护者

        ENV:设定环境变量

        ENTRYPOINT:容器入口

        USER:指定用户

        VOLUME:mount point

 3、镜像分层

 镜像是分层进行存储,Dockerfile中的每一行都产生一个新层

FROM alpine:latest        4e38e38c8ce0

MAINTAINER xbf        fb1aabf4427b

CMD echo 'hello docker'        3df065bfdff6

 一旦镜像被运行成一个容器,就会产生一个新层,容器层:

 这层是可读可写,容器可以被改写,分层主要是为了减少存储压力

四、存储

 1、volume介绍

volume(数据卷)提供独立于容器之外的持久化存储,可以在容器间共享和重用,对数据卷的写入操作,不会对镜像有任何影响,数据卷默认会一直存在,即容器被删除使用数据卷的目的是持久化容器中的数据,以在容器间共享或者防止数据丢失(写入容器存储层的数据会丢失)

2、通过volume路径对文件更改

运行一个nginx的容器

docker run -v /usr/share/nginx/html nginx

输入:docker inspect nginx进行检查

可以通过这个路径查看一下文件内容:

往里面追加内容:

进入入容器查看:docker exec -it nginx /bin/bash

                             cd /usr/share/nginx/html/

                             cat index.html

退出容器:ctrl + q

3、通过volume映射对文件进行更改

docker run -v $PWD/code:/var/www/html nginx

将当前目录的一个文件映射到容器里面去:

查看本地服务器下面的网页:

将本地内容和容器内容映射好后,不用进入容器进行更改,只需要在本地更改就行了

4、容器作为volume挂载到其它容器对文件进行更改

        命令:docker run -volumes-from ...

创建一个新的目录,将本地文件映射到一个新的容器中:

运行一个容器,将这个容器的数据卷加载到刚才那个容器里面去:

输入mount进行查看:

创建一个文件:

退出后,进入本地文件夹,可以看到,本地多了一个同样的文件:

说明数据卷的挂载是成功的,即实现了数据的共享

五、镜像仓库

1、registry介绍

仓库的镜像可以通过daemon被拉到本地进行使用

下面我们介绍一些常用的术语

        host:宿主机

        image:镜像

        container:容器

        registry:仓库

        daemon:守护程序

        client:客户端

常用的操作命令:

        docker search whalesay 搜索镜像

        docker pull whalesay 拉取镜像

        docker push myname/whalesay推送镜像

        docker有自己的仓库,但是速度不那么快,国内也有一些仓库,比如:daocloud,时速云,aliyun等

2、registry实战

(1)搜索镜像

        docker search 镜像名

(2)拉取镜像

        docker pull 镜像名

(3)运行镜像

        docker run 镜像名

(4)push镜像

        docker push 镜像名

如果被拒绝了需要先登陆,这里不进行演示

push速度相对比较慢,可以到hub.docker.com进行查看

六、多容器app

1、compose介绍

之前我介绍的都是单容器的运用,接下来介绍一下多容器的知识

通过docker-compose工具来拉取一个多容器应用

docker-compose安装

  • Mac/Windows:自带
  • Linux:curl https://github.com/docker/compose...

2、compose-install-linux

通过以下命令进行下载,需要一定时间(其中uname -s指操作系统,uname -m指系统位数)

增加可执行权限以及检查版本:

3、compose实战

(1)层次结构

层次结构

常用的配置文件一般为:docker-compose.yaml,以缩进的方式表达层级关系

按照如下模式创造三个文件夹:

(2)配置ghost

进入ghost文件夹,新建一个Dockerfile,内容如下

新建一个config.js文件,内容如下:

查看文件夹文件:

(3)配置nginx

进入nginx,新建Dockerfile和nginx配置文件,内容分别如下:

(4)配置compose文件

回到ghost文件夹,准备一个compose文件,文件内容如下

(5)构建命令

使用docker-compose up -d进行拉通

使用docker-compose stop停止拉通

使用docker-compose rm可以将构建的容器删除

如果有更改配置文件,重新构建编译镜像使用:docker-compose build

重新构建完后再使用:docker-compose up -d

在浏览器中输入:localhost可以看到ghost-app已经起来了

总结:ghost和nginx存放Dockerfile和配置文件,用来构建镜像,data用来存放数据,compose拉取了三个容器,共同协作完成了这个app

4、章节回顾

(1)docker-compose.yml常用命令

        build:本地创建镜像

        command:覆盖缺省命令

        depends_on:连接容器

        ports:暴露端口

        volumes:卷

        image:pull镜像

(2)docker-compose命令

        up:启动服务

        stop:停止服务

        rm:删除服务中的各个容器

        logs:观察各个容器的日志

        ps:列出服务相关的容器

五、总结

  • 容器Docker介绍
  • 如何制作镜像
  • 如何分享镜像
  • 如何持久化容器数据
  • 如何编排一个多容器的应用

答案就在以上内容中,自行寻找总结

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值