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命令

docker进程相关命令

启动docker服务

systemnctl start docker

停止docker服务

systemnctl stop docker

重启docker服务

systemnctl restart docker

查看docker服务状态

systemctl status docker

开机启动docker服务

systemnctl enable docker

多容器管理

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

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号)

这个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 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

Dockder容器的数据卷

数据卷概念:(持久化)

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

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

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

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

数据卷的作用:

容器数据持久化

外部机器和容器间接通信

容器之间的数据交换

配置数据卷

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

注意事项:

1,目录必须是绝对路径

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

3,可以挂载多个数据卷

数据卷容器

配置数据卷容器

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

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

数据卷小节

Docker应用部署

MySQL部署

端口映射

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

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

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

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

这种操作称为:端口映射

步骤

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

参数说明:

tomcat部署

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

参数说明:

nginx部署

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

参数说明:

redis部署

DockerFile

Docker镜像特性

Docker镜像原理

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

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

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

Dockerfile

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

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

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

dockerfile概念

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

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

使用步骤

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值