Docker容器技术

Docker基本介绍

LinuxContainer 是docker的底层实现技术

1、Linux Container是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源

2、Docker是 PAAS_提供商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 Github 上,基于go语言并遵从 Apache2.0协议开源

3、Docker设想是交付运行环境如同海运,OS 如同一个货轮,每一个在OS 基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造

容器级别虚拟化消耗本机资源量最小,可为支持更多用户访问,但安全性较差

docker构成

仓库,镜像,容器

镜像:

封装好的运行环境

docker镜像运行之后变成容器(docker run)

容器:

正在运行的运行环境

仓库:

存放镜像,docker仓库:Docker Hub

docker组件间的协同方式

Docker容器技术_第1张图片

Docker命令

docker进程相关命令

启动docker服务

systemnctl start docker

停止docker服务

systemnctl stop docker

重启docker服务

systemnctl restart docker

查看docker服务状态

systemctl status docker

开机启动docker服务

systemnctl enable docker

多容器管理

docker提倡理念是"一个容器一个进程",如果一个服务需要多个进程组成,就需要多个容器组成一个系统

Docker容器技术_第2张图片

docker镜像相关命令

Docker指令除了单条使用外,还支持赋值、解析变量、嵌套使用

docker命令大全:Docker 命令大全 | 菜鸟教程

查看镜像

docker images

查看本地已下载的镜像

REPOSITORY(镜像名称) TAG(版本号) IMAGE ID(ID号)

搜索镜像

docker search 镜像名

在镜像仓库里搜索镜像

拉去镜像

docker pull 镜像名:版本号(不写版本号默认最新版本)

从镜像仓库下载镜像到本地

删除镜像

docker rmi ID号/镜像名:版本号(remove image删除镜像)

可用id号删除,也可以镜像名:版本号删除

docker rmi 'docker images -q' 删除所有本地镜像 (docker images -q 查看所有镜像的id号)

Docker容器技术_第3张图片

这个ID号完整版128位

docker容器相关的命令

查看容器

docker ps -a (可查看历史容器)

创建容器 -it创建的成为交互式容器,-id创建的称为守护式容器

docker run -it --nam7e=c1 centos:7 /bin/bash (创建时直接启动并进入,exit退出时直接关闭)

-i:保持运行,-t:给容器分配终端好接收命令,--name=?:给容器起名字 ,centos:7 容器名+版本号, /bin/bash:初始化指令

docker run -id --name=c2 centos:7 (创建容器并后台运行)

-d:后台运行容器

Docker容器技术_第4张图片

进入容器

docker erec -it c2 /bin/bash (进入c2容器,因为c2是-d创建的,exit后不会关闭)

启动容器

docker start c1

停止容器

docker stop c2

删除容器

docker rm c1

docker rm 'docker ps -aq' 删除所有容器

查看容器信息

docker inspect c2

Docker容器技术_第5张图片

Docker容器技术_第6张图片

Dockder容器的数据卷

数据卷概念:(持久化)

数据卷是宿主机中的一个目录或文件

当容器目录和数据卷目录绑定后,对方的修改会立即同步

一个数据卷可以被多个容器同时挂载

一个容器也可以被挂载多个数据卷

Docker容器技术_第7张图片

数据卷的作用:

容器数据持久化

外部机器和容器间接通信

容器之间的数据交换

Docker容器技术_第8张图片

配置数据卷

创建启动容器时,使用-v参数 设置数据卷

注意事项:

1,目录必须是绝对路径

2,如果目录不存在,会自动创建

3,可以挂载多个数据卷

数据卷容器

Docker容器技术_第9张图片

配置数据卷容器

1,创建启动c3数据卷容器,使用-v参数 设置数据卷(/volume为容器内目录)

创建启动c1,c2容器,使用--volumes-from 参数 设置数据卷

数据卷小节

Docker容器技术_第10张图片

Docker应用部署

MySQL部署

Docker容器技术_第11张图片

端口映射

容器内的网络服务和外部机器不能直接通信

外部机器和宿主机可以直接通信

宿主机和容器可以直接通信

当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。让外部机器访问宿主机的该端口,从而间接访问容器的服务。

这种操作称为:端口映射

Docker容器技术_第12张图片

步骤

1,搜索mysql镜像

docker search mysql

2,拉取mysql镜像

docker pull mysql:5.6

3,创建容器,设置端口映射,目录映射

#在/root目录下创建mysql目录用于存储mysql数据信息

mkdir ~/mysql

cd ~/mysql

docker run -id \

-p 3307:3306 \ #宿主机的3307端口映射到容器的3306端口,宿主机用3306也是ok的

--name=c_mysql \

-v $PWD/conf:/etc/mysql/conf.d \ 目录挂载,配置目录

-v $PWD/logs:/logs \ 日志目录

-v $PWD/data:/var/lib/mysql \ 数据目录

-e MYSQL_ROOT_PASSWORD=123456 \

mysql:5.6

参数说明:

Docker容器技术_第13张图片

tomcat部署

Docker容器技术_第14张图片

1,搜索tomcat镜像

docker search tomcat

2,拉取mysql镜像

docker pull tomcat

3,创建容器,设置端口映射,目录映射

#在/root目录下创建mysql目录用于存储tomcat数据信息

mkdir ~/tomcat

cd ~/tomcat

docker run -id --name=c_tomcat \

-p 8080:8080 \

-v $PWD:/usr/local/tomcat/webapps \

tomcat

4,写一个内容为"hello tomcat docker"的html文件

5,使用外部机器访问tomcat

Docker容器技术_第15张图片

参数说明:

nginx部署

Docker容器技术_第16张图片

Docker容器技术_第17张图片

user nginx;

worker_processes 1;

error_log /var/log/nginx/error . log warn;
pid /var/run/nginx.pid;

events {

worker _connections1024;

}

http {

include / etc/nginx/mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_loca1] "$request" '

'$status $body_bytes_sent " Shttp_referer" '

'"Shttp_user _agent" ""Shttp_x_forwarded_for " ';

access_log /var / log/nginx / access.logmain;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d / * . conf;

}

---------------------------------------------------------------------------

docker run -id --name=c_nginx \

-p 80:80 \

-v $PWD/conf/nginx.conf:/etc/nfinx/nginx.conf \

-v $PWD/logs:/var/log/nginx \

-v $PWD/html:/usr/share/nginx/html \

nginx

参数说明:

Docker容器技术_第18张图片

redis部署

Docker容器技术_第19张图片

Docker容器技术_第20张图片

DockerFile

Docker镜像特性

Docker容器技术_第21张图片

Docker容器技术_第22张图片

Docker镜像原理

Docker容器技术_第23张图片

用户眼里只看到暴露在最外层的镜像

下层的镜像不暴露但可以复用

要想修改镜像,需要先运行镜像,镜像运行成为容器会在最顶层加载一个读写文件系统作为容器,修改这个然后打包产生新的镜像。

Docker容器技术_第24张图片

Docker容器技术_第25张图片

Dockerfile

Docker容器技术_第26张图片

docker commit 容器id 镜像名称:版本号(将容器打包为镜像)

docker save -o 压缩文件名称 镜像名称:版本号(将镜像打包 为压缩文件)

docker load -i 压缩文件名称(把文件解压)

dockerfile概念

统一开发,测试,运维的环境

Docker容器技术_第27张图片

Docker容器技术_第28张图片

1,mkidr docker-files

2,cd docker-files/

3,vim centos_dockerfile

写入实现步骤

4,docker build -f ./centos_dockerfile -t newcentos:1 .

 

dockerfile是创建docker镜像的语法,最大不超过128层,即不超过128行命令

FROM XXX(基于什么镜像)

MAINTAINER (标明dockerfile的作者)
WORKDIR(指定shell语句运行在那个路径下)
COPY(将宿主机的文件拷贝到某路径下)

ADD 添加文件(可以添加远程的)
RUN(执行命令,默认是/bin/sh格式,如RUN echo 321 >> 1.txt)
CMD (容器启动命令,指定镜像启动运行的脚本,只有容器真正运行的时候才会运行的脚本,执行后容器的生命周期即结束,且一般为阻塞式语句,如tail语句)

一般语句为:
FROM WORKDIR COPY-ADD RUN CMD-ENTRYPOINT
ENTRYPOINT非json则以ENTRYPOT为准,如果ENTRYPOINT和CMD都是JSON则ENTRYPOINT+CMD拼接成shell

WORKDIR---指定工作目录
EXPOSE---暴露镜像的指定端口
VOLUME---指定映射文件
ENV---指定doker的环境变量,运行时一直生效
ARG---构建参数,运行时无效,可以构建时候临时修改变量
LABEL---标签,指定元数据,便于找到docker
ONBUILD---当前镜像构建的时候不会执行,基于当前镜像的镜像去构建的时候才会执行
STOPSIGNAL---指定容器使用什么信号,一般指定信号名
HEALTHCHECK---检查容易的健康状态
SHELL---指定linux为/bin/sh,windows为cmd

通过dockerfile进行镜像仓库构建

建个目录用来存放dockerfile文件

编写dockerfile文件

docker build -f 路径(指定dockerfile的文件路径) -t 镜像名:版本(设置新镜像的名称和版本)

step有五步,dockerfile文件每一行构建一层。最高128层

Docker多阶段构建

Docker目前在容器市场可以说是占领了大部分市场,Docker掀起了容器革命,同时也改变了现代化云平台的构建方式。尽管Docker很强大,但使用过程当中也遇到了一些问题。比如说我想要构建一个编译型语言镜像,需要先在一个Dockerfile中编译,然后再使用另外一个Dockerfile把编译好的文件放到镜像中。这样无形当中就增大了CI/CD的复杂度。
 

Docker多阶段构建是17.05以后引入的新特性,旨在解决编译和构建复杂的问题。减小镜像大小。因此要使用多阶段构建特性必须使用高于或等于17.05的Docker。

Docker服务编排

Docker容器技术_第29张图片

服务编排:按照一定的业务规则批量管理容器

Docker Compose是一个编排多容器分布式部署的工具,提供命令管理容器化应用的完整开发周期,包括服务构建,启动和停止。

使用步骤

1,利用dockerfile定义运行环境镜像

2,使用docker-compose.yml定义组成应用的各服务

3,运行docker-compose up 启动应用

Docker容器技术_第30张图片

Docker容器技术_第31张图片

你可能感兴趣的:(学习笔记,docker,容器,运维)