一.docker安装 yum install -y yum-utils device-mapper-persistent-data lvm2 依赖
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 安装源
yum install docker-ce -y
[root@server1 ~]# systemctl start docker [root@server1 ~]# systemctl enable docker
配置daocloud镜像加速器 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io [root@server1 ~]# vim /etc/docker/daemon.json
二.docker简单命令总结 导出镜像 倒入镜像 容器相关选项 容器管理命令
容器资源限制选项
例: **注:**一个宿主机跑多个容器,这个资源限制需要做,运行中也可以使用update进行更新重新设置。
三.dockerfile介绍
例1:用dockerfile创建一个yum nginx容器 创建前,用一个下载好的centos镜像,安装net-tools iproute等工具 docker commit centos centos:v1
创建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
查看创建好的镜像
运行创建好的镜像
例2:用dockerfile创建一个源码安装的 nginx容器
创建dockerfile
[root@server1 nginx]# 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创建一个项目镜像 创建项目镜像nginx:v2 docker build -t nginx:v2 . 使用新镜像 docker run -d --name nginx02 -p 80:80 nginx:v2
例3:用dockerfile创建一个源码安装的 php容器
创建dockerfile
[root@server1 php]# 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容器 [root@server1 tomcat]# ls Dockerfile [root@server1 tomcat]# 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项目镜像
创建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 查看挂载信息 可以直接看挂载目录下的文件
在宿主机对index.html文件进行修改
进入容器查看默认网页已经变为我们修改的docker123
2.为指定挂载目录 docker run -v $PWD/code: /usr/share/nginx/html nginx
将/root/d2 挂载到容器里的 /usr/share/nginx/html目录下
在指定目录下创建默认网页 测试并查看镜像里的文件,已经正确挂载
3.docker run --volumes-from容器挂载共享数据目录
注:docker create命令能够基于镜像创建容器。 该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。 但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。
例:创建一个docker共享数据目录,映射到/var/mydata,可以理解为创建了一个docker的共享盘,共享盘映射宿主机的data目录 创建一个新容器与共享数据容器相连 交互式连接后查看挂载点
进入到/var/mydata目录下创建文件 创建完退出,查看宿主机data目录,已经有数据
4.宿主机数据挂载到容器中Volume 在宿主机上创建数据卷,挂载到容器上
首先创建数据卷
这个容器数据卷可以被一个或者多个数据卷挂载,查看数据卷属性
用上述的创建的盘,挂载到nginx容器上,新版本用的是mount,老版本使用的是-v挂载
[root@server1 ~]# docker inspect nginx01 查看挂载情况
宿主机的数据卷已经有里头的数据了
**注:**这样容器坏了,由于数据在宿主机的数据卷上,所以没有事,这个数据卷也可以挂载到多个容器上共享数据内容
删除数据卷: docker volume rm nginx_vol
五.registry仓库 与仓库交互 docker search nginx 搜索nginx镜像 docker pull nginx 拉取nginx镜像 docker push an/nginx 上传nginx自制镜像
六.多容器app docker compose介绍 yum install -y docker-compose 安装
docker-compose --version 查看版本
常用字段
常用命令
例1:compose创建lnmp
[root@server1 compose_lnmp]# 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目录
查看php目录
查看mysql,mysql yum安装
执行docker-compose文件 [root@server1 compose_lnmp]# docker-compose -f docker-compose.yml up 构建完使用docker-compose ps查看 [root@server1 compose_lnmp]# docker-compose ps
例2:compose创建nginx+tomcat
[root@server1 compose_nginx_tomcat]# 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目录
查看tomcat目录