Docker18.09版本练习
http://i2.运维网.com/images/blog/201812/03/b290ee0fb8281e719a8437b669ec87be.png一.docker安装
yum install -y yum-utilsdevice-mapper-persistent-datalvm2 依赖
yum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo 安装源
yum install docker-ce -y
# systemctl start docker
# systemctl enable docker
http://i2.运维网.com/images/blog/201812/08/10c6f08fbc07ef57fe2d1d990f7d160a.png
配置daocloud镜像加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# vim /etc/docker/daemon.json
http://i2.运维网.com/images/blog/201812/08/6830fbf0bf2a25567fae9730345a5bd3.png
二.docker简单命令总结
http://i2.运维网.com/images/blog/201812/08/8f6f0b22235f886acada2a327f51e5e3.png
导出镜像
http://i2.运维网.com/images/blog/201812/08/da1f04a87cc6b3e2fdbe06ff925fc65e.png
倒入镜像
http://i2.运维网.com/images/blog/201812/08/a546bd27635c4ebb5a99a9b14f00149c.png
容器相关选项
http://i2.运维网.com/images/blog/201812/08/75fb975985d89b72589435c81277f568.png
容器管理命令
http://i2.运维网.com/images/blog/201812/08/51b74934258f36615ade8222585ef0d4.png
容器资源限制选项
http://i2.运维网.com/images/blog/201812/08/46d3753c95010385328efa82c5bd8f4f.png
例:
http://i2.运维网.com/images/blog/201812/08/a88439a207a28a877ec7283b560e84bf.png
注:一个宿主机跑多个容器,这个资源限制需要做,运行中也可以使用update进行更新重新设置。
三.dockerfile介绍
http://i2.运维网.com/images/blog/201812/09/733993429d4d4205bb4fe37cc410c021.png
http://i2.运维网.com/images/blog/201812/01/561c34c565a40d13117124f52097f744.png
例1:用dockerfile创建一个yum nginx容器
创建前,用一个下载好的centos镜像,安装net-tools iproute等工具
docker commit centos centos:v1
http://i2.运维网.com/images/blog/201812/03/18d95470167b25cbeb4d1051f9d31695.png
创建dockerfile
FROM centos:v1原封装号的镜像
MAINTAINER an作者
RUN yum install -y epel-release.noarch &>/dev/null 安装epel源
RUN yum install -y nginx &>/dev/null安装nginx
COPY index.html /usr/share/nginx/html复制默认网页
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] nginx以前台方式一直运行
EXPOSE 80 暴露端口80
http://i2.运维网.com/images/blog/201812/03/c8e8e5ad4c776500cd99ea8602d596c7.png
查看创建好的镜像
http://i2.运维网.com/images/blog/201812/03/0ce191db084998b6bbead4b8e80bb3e8.png
运行创建好的镜像
http://i2.运维网.com/images/blog/201812/03/a4425ac1c6f449fb3355fe03d90e39e2.png
例2:用dockerfile创建一个源码安装的nginx容器
http://i2.运维网.com/images/blog/201812/09/610752811485e77094b271f350d0e4ab.png
创建dockerfile
# cat Dockerfile
FROM centos
MAINTAINER an
RUN yum install -y gcc gcc-c++ make \
openssl-devel pcre-devel gd-devel \
iproute net-tools telnet wget curl && \
yum clean all && \
rm -rf /var/cache/yum/
RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz && \
tar zxf nginx-1.15.5.tar.gz && \
cd nginx-1.15.5 &&\
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module && \
make -j 2 && make install && \
rm -rf /usr/local/nginx/html/ && \
echo "ok" >> /usr/local/nginx/html/index.html && \
cd / && rm -rf nginx-1.12.2* && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/nginx/sbin
#COPY nginx.conf /usr/local/nginx/conf/nginx.conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
最后创建镜像nginx:v1
docker build -t nginx:v1 .
使用nginx:v1创建一个项目镜像
http://i2.运维网.com/images/blog/201812/09/7424917ed98be6becc95761513e42fd9.png
创建项目镜像nginx:v2
docker build -t nginx:v2 .
使用新镜像
docker run -d --name nginx02 -p 80:80 nginx:v2
例3:用dockerfile创建一个源码安装的php容器
http://i2.运维网.com/images/blog/201812/09/65992202bd2e3b7d9d5f1aadab4fa437.png
创建dockerfile
# cat Dockerfile
FROM centos
MAINTAINER an
RUN yum install epel-release -y && \
yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
libcurl-devel libjpeg-devel libpng-devel openssl-devel \
libmcrypt-devel libxslt-devel libtidy-devel autoconf \
iproute net-tools telnet wget curl && \
yum clean all && \
rm -rf /var/cache/yum/*
RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \
tar zxf php-5.6.36.tar.gz && \
cd php-5.6.36 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm --enable-opcache \
--with-mysql --with-mysqli --with-pdo-mysql \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-freetype-dir \
--enable-mbstring --with-mcrypt --enable-hash && \
make -j 4 && make install && \
cp php.ini-production /usr/local/php/etc/php.ini && \
cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf && \
sed -i "90a \daemonize = no" /usr/local/php/etc/php-fpm.conf && \
mkdir /usr/local/php/log && \
cd / && rm -rf php* && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/php/sbin:/usr/local/php/bin
COPY php.ini /usr/local/php/etc/
COPY php-fpm.conf /usr/local/php/etc/
WORKDIR /usr/local/php
EXPOSE 9000
CMD ["php-fpm"]
注:
这里也是将daemon模式关闭了,/usr/local/php/sbin/php-fpm在前台运行
构建镜像
docker build -t php:v1 .
启动镜像
docker run -d --name php01 php:v1
例4:用dockerfile创建一个tomcat容器
# ls
Dockerfile
# cat Dockerfile
FROM centos
MAINTAINER an
ENV VERSION=8.0.46
RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapps/test && \
echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh", "run"]
创建镜像
docker build -t tomcat:v1 .
启动镜像
docker run -d --name tomcat01 -p 8089:8080 tomcat:v1
使用tomcat:v1创建一个jenkins项目镜像
http://i2.运维网.com/images/blog/201812/09/d6fb252615cce3e6d7c218b18a3c6316.png
创建jenkins镜像
docker built -t jemkins:v1 .
启动镜像
docker run -d --name jenkins01 -p 8088:8080 jemkins:v1
四.docker 存储Volume
提供独立于容器之外的持久化存储
1.不指定挂载映射目录,默认的路径为 /var/lib/docker/volumes下
docker run -d --name nginx -v /usr/share/nginx/html docker.io/nginx
例:挂载/usr/share/nginx/html
http://i2.运维网.com/images/blog/201812/03/2603590f5cc486f7951b7690e952bc24.png
查看挂载信息
http://i2.运维网.com/images/blog/201812/03/70f55fbd121a7d759c00f1d2861a5e29.png
可以直接看挂载目录下的文件
http://i2.运维网.com/images/blog/201812/03/ed554444c14d6931dfe7bd3b6e2a4e8e.png
在宿主机对index.html文件进行修改
http://i2.运维网.com/images/blog/201812/03/65df144d50104df8b2d17f14a890c501.png
进入容器查看默认网页已经变为我们修改的docker123
http://i2.运维网.com/images/blog/201812/03/e9db5b84eb48ca2f9f004ce7d0190e9f.png
2.为指定挂载目录 docker run -v $PWD/code: /usr/share/nginx/html nginx
将/root/d2 挂载到容器里的 /usr/share/nginx/html目录下
http://i2.运维网.com/images/blog/201812/03/acfae44e2dc2ba83ec8f4519e30f0f3a.png
在指定目录下创建默认网页
http://i2.运维网.com/images/blog/201812/03/7396b6182b26e9ea1caa23f5203d970f.png
测试并查看镜像里的文件,已经正确挂载
http://i2.运维网.com/images/blog/201812/03/9b4130e94181f75b2750726b8974b34b.png
3.docker run --volumes-from容器挂载共享数据目录
注:docker create命令能够基于镜像创建容器。
该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。
但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。
例:创建一个docker共享数据目录,映射到/var/mydata,可以理解为创建了一个docker的共享盘,共享盘映射宿主机的data目录
http://i2.运维网.com/images/blog/201812/03/77cf0403a85bfe04d03fa19a963b2ef7.png
创建一个新容器与共享数据容器相连
交互式连接后查看挂载点
http://i2.运维网.com/images/blog/201812/03/db51348f42fb27957ef56028b0734ecf.png
进入到/var/mydata目录下创建文件
http://i2.运维网.com/images/blog/201812/03/125e2effaa79f7cf19b647c4508c2bc7.png
创建完退出,查看宿主机data目录,已经有数据
http://i2.运维网.com/images/blog/201812/03/b7f8e4381be88d382291c47e6c5166eb.png
4.宿主机数据挂载到容器中Volume
在宿主机上创建数据卷,挂载到容器上
首先创建数据卷
http://i2.运维网.com/images/blog/201812/09/9dffb645b5d3a266c38e0ec3a21f53d8.png
这个容器数据卷可以被一个或者多个数据卷挂载,查看数据卷属性
http://i2.运维网.com/images/blog/201812/09/eeaf27badae185f38e9d946ba74bc410.png
用上述的创建的盘,挂载到nginx容器上,新版本用的是mount,老版本使用的是-v挂载
http://i2.运维网.com/images/blog/201812/09/6c1c691006664faee9df07a0de045900.png
# docker inspect nginx01查看挂载情况
http://i2.运维网.com/images/blog/201812/09/9b57b13994939a4d1d112d62d1162104.png
宿主机的数据卷已经有里头的数据了
http://i2.运维网.com/images/blog/201812/09/c75f5aef1b919a558ccf4c62d6ef1360.png
注:这样容器坏了,由于数据在宿主机的数据卷上,所以没有事,这个数据卷也可以挂载到多个容器上共享数据内容
删除数据卷:
docker volume rm nginx_vol
五.registry仓库
http://i2.运维网.com/images/blog/201812/03/1d27eff6c4515bc06ab82c606c513ee5.png
与仓库交互
docker searchnginx搜索nginx镜像
docker pull nginx 拉取nginx镜像
docker push an/nginx 上传nginx自制镜像
六.多容器app docker compose介绍
yum install -y docker-compose安装
docker-compose --version 查看版本
http://i2.运维网.com/images/blog/201812/04/24bc07749cef3b2ee2cce39336054155.png
常用字段
http://i2.运维网.com/images/blog/201812/09/2b8346c7479911b31b4cab7×××cc613.png
常用命令
http://i2.运维网.com/images/blog/201812/09/c8e5015def7a8e1605ad313a9dc9e3a0.png
例1:compose创建lnmp
http://i2.运维网.com/images/blog/201812/09/d21dda4745df118b616a82e447742cb6.png
# cat docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
[*]81:80
networks:
[*]lnmp
volumes:
[*] ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build:
context: ./php
dockerfile: Dockerfile
networks:
[*]lnmp
volumes:
[*] ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
image: mysql:5.6
ports:
[*]3306:3306
networks:
[*]lnmp
volumes:
[*]./mysql/conf:/etc/mysql/conf.d
[*]./mysql/data:/var/lib/mysql
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123
networks:
lnmp:
查看nginx目录
http://i2.运维网.com/images/blog/201812/09/7c97d6426d79a5250bb382fe53f9bd0c.png
查看php目录
http://i2.运维网.com/images/blog/201812/09/2eb4a5f59ad1acd2ba2617dde7e237fd.png
查看mysql,mysql yum安装
http://i2.运维网.com/images/blog/201812/09/3e6b05e047d7acac32a881258bc6308c.png
执行docker-compose文件
# docker-compose -f docker-compose.yml up
构建完使用docker-compose ps查看
# docker-compose ps
例2:compose创建nginx+tomcat
http://i2.运维网.com/images/blog/201812/09/c4047ee663f8e957f6c4d970015332dd.png
# cat docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
[*]82:80
networks:
[*]lnmt
volumes:
[*] ./webapps:/opt/webapps
tomcat01:
hostname: tomcat01
build: ./tomcat
networks:
[*]lnmt
volumes:
[*]/usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
[*] ./webapps:/usr/local/apache-tomcat-8.0.46/webapps
tomcat02:
hostname: tomcat02
build: ./tomcat
networks:
[*]lnmt
volumes:
[*]/usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
[*] ./webapps:/usr/local/apache-tomcat-8.0.46/webapps
mysql:
hostname: mysql
image: mysql:5.6
ports:
[*]3307:3306
networks:
[*]lnmt
volumes:
[*]./mysql/conf:/etc/mysql/conf.d
[*]./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: db
MYSQL_USER: user
MYSQL_PASSWORD: user123
networks:
lnmt:
注:
[*]/usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
保证容器体积,将宿主机的java环境给容器用
查看nginx目录
http://i2.运维网.com/images/blog/201812/09/908c2d77f3e24dbf3732cad29d23ed65.png
查看tomcat目录
http://i2.运维网.com/images/blog/201812/09/cd1b53001b9d9ec121dfa1b8e45af0fb.png
页:
[1]