一、简介
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-reload和systemctl 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介绍
- 如何制作镜像
- 如何分享镜像
- 如何持久化容器数据
- 如何编排一个多容器的应用
答案就在以上内容中,自行寻找总结