标签(空格分隔): docker的部分php
一:Docker概述html
二:Docker安装java
三:镜像管理node
四:容器管理mysql
五:管理应用程序数据linux
六:容器网络nginx
七:Dockerfilec++
- 八:企业级镜像仓库Harbor
1. 使用最普遍的开源容器引擎 2. 一种操做系统级的虚拟化技术 3. 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制) 4. 一个简单的应用程序打包工具
1. 提供简单的应用程序打包工具 2. 开发人员和运维人员职责逻辑分离 3. 多环境保持一致性
1. Docker Client:客户端 2. Ddocker Daemon:守护进程 3. Docker Images:镜像 4. Docker Container:容器 5. Docker Registry:镜像仓库
1. 应用程序打包和发布 2. 应用程序隔离 3. 持续集成 4. 部署微服务 5. 快速搭建测试环境 6. 提供PaaS产品(平台即服务)
1. 社区版(Community Edition,CE) 2. 企业版(Enterprise Edition,EE)
1. Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu) 2. Mac 3. Windows
提供的官方网址 官方文档:https://docs.docker.com # 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker软件包源 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装Docker CE yum install -y docker-ce # 启动Docker服务并设置开机启动 systemctl start docker systemctl enable docker
镜像是什么? 1. 一个分层存储的文件 2. 一个软件的环境 3. 一个镜像能够建立N个容器 4. 一种标准化的交付 5. 一个不包含Linux内核而又精简的Linux操做系统 镜像不是一个单一的文件,而是有多层构成。咱们能够经过docker history <ID/NAME> 查看镜像中各层内容及大小,每层 对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/\<storage-driver\>中。
镜像从哪里来? Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。 地址:https://hub.docker.com/explore 配置镜像加速器:https://www.daocloud.io/mirror curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
以下图,容器实际上是在镜像的最上面加了一层读写层,在运行容器里文件改动时, 会先从镜像里要写的文件复制到容器本身的文件系统中(读写层)。 若是容器删除了,最上面的读写层也就删除了,改动也就丢失了。因此不管多 少个容器共享一个镜像,所作的写操做都是从镜像的文件系统中复制过来操做 的,并不会修改镜像的源文件,这种方式提升磁盘利用率。 若想持久化这些改动,能够经过docker commit 将容器保存成一个新镜像。
docker info 列出当前的docker 的版本
去这里 下载: https://download.openvz.org/template/precreated/ cat centos-6-x86_64-minimal.tar.gz |docker import - centos:6.0 ## 建立镜像 cat centos-7-x86_64-minimal.tar.gz |docker import - centos:7.0 cat ubuntu-16.04-x86_64.tar.gz |docker import - ubuntu:16.04 另外一个种方法: docker pull nginx:1.15 docker history nignx:1.15 这个分层的下载的
建立一个容器: docker run -itd --name nginx-test -p 8080:80 nignx:1.15 docker ps -l 进入一个容器 docker exec -ti 1e9515c8c966 /bin/bash
docker commit 1e9515c8c966 nginx-test:v1 提交容器到本地仓库
docker image nginx-test:v1 > nginx-test.tar 导出一个镜像
docker image rm nginx-test:v1 删掉一个镜像
docker load -i nginx-test.tar 导入一个镜像
docker tag nginx-test:v1 node04.flyfish/nginx/myapp:v1 给镜像打个标签方便提交到私有仓库 docker images
进入一个容器: docker pull httpd docker run -tid --name httpd-test -p 4040:80 httpd docker ps -l
进入这个容器 docker ps -l docker exec -ti a30f616852a1 /bin/bash
docker run -tid --name centos7-test centos:7.0:v1 /bin/bash docker ps -a
docker run -tid --name nginx1-test1 -p 6060:80 --restart always nginx:1.15 开机自启动 容器 (默认是docker 启动 容器是不启动的)
docker run -tid --name nginx2-test2 -p 7070:80 -e flyfish=zhangyy -h nginx-web --restart always nginx:1.15 指定 容器的 hostname 名称 与 制定 环境变量 并设置开机自启动
查看日志 docker logs 8ea2c0ae169a -f
示例: 内存限额: 容许容器最多使用500M内存和100M的Swap,并禁用 OOM Killer: docker run -d --name nginx03 --memory 500m --memory-swap 600M --oom-kill-disable nginx:1.15 docker stats f50b08998e87
CPU限额: 容许容器最多使用一个半的CPU: docker run -d --name nginx04 --cpus="1.5" nginx:1.15 docker stats 79b51c9d4eee
容许容器最多使用50%的CPU: docker run -d --name nginx05 --cpus=".5" nginx:1.15 docker stats e70a483d0519
查看容器 docker container ls docker ps -a
进入容器执行命令: docker exec -ti e70a483d0519 /bin/bash docker exec e70a483d0519 ls
提交容器: docker commit e70a483d0519 nginx05:v1 docker images
文件拷贝到容器中 docker cp nginx-test.tar e70a483d0519:/ docker exec e70a483d0519 ls
docker logs -f 8ea2c0ae169a
查看容器的映射对外端口: docker port 8ea2c0ae169a
查看当前容器运行的主进程 docker top 8ea2c0ae169a
查看容器的是使用的资源 docker stats 8ea2c0ae169a --no-stream
删除容器: docker rm e70a483d0519
Docker提供三种方式将数据从宿主机挂载到容器中: • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。 • bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。 • tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。若是不但愿将数据持久存储在任何位置,可使用tmpfs,同时避免写入容器可写层提升性能。
管理卷: # docker volume create nginx-vol # docker volume ls # docker volume inspect nginx-vol 用卷建立一个容器: # docker run -d --name=nginx3-test3 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx:1.15 # docker run -d --name=nginx3-test3 -v nginx-vol:/usr/share/nginx/html nginx1.15 清理: # docker stop nginx3-test3 # docker rm nginx3-test3 # docker volume rm nginx-vol 注意: 1. 若是没有指定卷,自动建立。 2. 建议使用--mount,更通用。
用卷建立一个容器: # docker run -d -it --name=nginx4-test4 --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx:1.15 # docker run -d -it --name=nginx4-test4 -v /app/wwwroot:/usr/share/nginx/html nginx:1.15 验证绑定: # docker inspect nginx4-test4 清理: # docker stop nginx4-test4 # docker rm nginx4-test4 注意: 1. 若是源文件/目录没有存在,不会自动建立,会抛出一个错误。 2. 若是挂载目标在容器中非空目录,则该目录现有内容将被隐藏。
Volume特色: • 多个运行容器之间共享数据。 • 当容器中止或被移除时,该卷依然存在。 • 多个容器能够同时挂载相同的卷。 • 当明确删除卷时,卷才会被删除。 • 将容器的数据存储在远程主机或其余存储上 • 将数据从一台Docker主机迁移到另外一台时,先中止容器,而后备份卷的目录(/var/lib/docker/volumes/) --- Bind Mounts特色: • 从主机共享配置文件到容器。默认状况下,挂载主机/etc/resolv.conf到每一个容器,提供DNS解析。 • 在Docker主机上的开发环境和容器之间共享源代码。例如,能够将Maven target目录挂载到容器中,每次在Docker主机 上构建Maven项目时,容器均可以访问构建的项目包。 • 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时
• bridge –net=bridge 默认网络,Docker启动后建立一个docker0网桥,默认建立的容器也是添加到这个网桥
• host –net=host 容器不会得到一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有本身的网卡信息,而是使用宿主机的。容器除了网络,其余都是隔离的。
docker run -tid --net=host busybox docker exec -ti 59a38da6c947 sh 与 宿主机共享一个网络
• none –net=none 获取独立的network namespace,但不为容器进行任何网络配置,须要咱们手动配置。
• container –net=container:Name/ID 与指定的容器使用同一个network namespace,具备一样的网络配置信息,两个容器除了网络,其余都仍是隔离的。
docker run -tid --net=container:nginx04 busybox docker exec -ti 4d141b2cb971 /bin/bash docker inspect 79b51c9d4eee 和nginx04 公用一个IP地址
• 自定义网络 与默认的bridge原理同样,但自定义网络具有内部DNS发现,能够经过容器名或者主机名容器之间网络通讯。
docker network create test-nt docker run -ti --net=test-nt --name bs11 busybox 在开一个终端: docker run -ti --net=test-nt --name bs12 busybox
vim test.yaml --- FROM centos7.0:v1 MAINTAINER flyfish RUN yum install gcc -y COPY run.sh /usr/bin EXPOSE 80 CMD [“run.sh”] ---
Build镜像 ---- Usage: docker build [OPTIONS] PATH | URL | - [flags] Options: -t, --tag list # 镜像名称 -f, --file string # 指定Dockerfile文件位置 # docker build . # docker build -t shykes/myapp . # docker build -t shykes/myapp -f /path/Dockerfile /path # docker build -t shykes/myapp http://www.example.com/Dockerfile
示例: touch index.html echo 11111 > index.html vim Dockerfile --- FROM centos7.0:v1 MAINTAINER flyfish RUN yum install -y httpd COPY index.html /var/www/html ENV HTTP_V=2.0 EXPOSE 80 WORKDIR /tmp CMD ["httpd","-D","FOREGROUND"] --- docker build -t httpd:v1 -f Dockerfile . docker images
构建一个nginx 镜像: mkdir nginx cd nginx vim Docker-nginx ---- FROM centos:7 MAINTAINER flyfish 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 4 && make install && \ rm -rf /usr/local/nginx/html/* && \ echo "ok" >> /usr/local/nginx/html/status.html && \ cd / && rm -rf nginx-1.15.5* && \ 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;"] ---- docker build -t nginx:v1 -f Dockerfile . docker images
测试: docker run -tid --name nginx1.15-test1 nginx:v1 /bin/bash
构建一个php的镜像 mkdir php mv Dockerfile-php php-fpm.conf php.ini php --- FROM centos:7 MAINTAINER flyfish 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 COPY php.ini /usr/local/php/etc/ COPY php-fpm.conf /usr/local/php/etc/ WORKDIR /usr/local/php EXPOSE 9000 CMD ["php-fpm"] ---- docker build -t php:v1 -f Dockerfile . docker images |grep php
一、自定义网络 docker network create lnmp 二、建立Mysql容器 docker run -d \ --name lnmp_mysql \ --net lnmp \ --mount src=mysql-vol,dst=/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8 三、建立PHP容器 docker run -d --name lnmp_php --net lnmp --mount src=wwwroot,dst=/wwwroot php:v1 四、建立Nginx容器 docker run -d --name lnmp_nginx --net lnmp -p 88:80 \ --mount src=wwwroot,dst=/wwwroot nginx:v1 五、以wordpress博客为例 https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
cd /var/lib/docker/volume/wwwroot/_data/ vim test.php --- <?php phpinfo();?> ---
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz tar -zxvf wordpress-4.9.4-zh_CN.tar.gz
http://ip:88/wordpress/
FROM centos:7 MAINTAINER flyfish ENV VERSION=8.5.54 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 https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \ #RUN wget http://192.168.31.211/apache-tomcat-${VERSION}.tar.gz && \ tar zxf apache-tomcat-${VERSION}.tar.gz && \ mv apache-tomcat-${VERSION} /usr/local/tomcat && \ 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"]
基于镜像 tomcat:v1 镜像 构建一个jenkins 部署 镜像 vim Dockerfile-jenkis --- FROM tomcat:v1 COPY jenkins.war /usr/local/tomcat/webapps/ROOT.war --- docker build -t tomcat-jenkins:v1 -f Dockerfile-jenkins .
使用tomcat-jenkins:v1 构建一个jenkins的项目 docker run -tid --name jenkins-test -p 8080:8080 --restart always -h jenkins tomcat-jenkins:v1
密码: docker exec -ti e0edd5f81092 cat /root/.jenkins/secrets/initialAdminPassword --- 67f0ce7c72dd4fca83f8f6d047fb46de --- 下面安装就能够了
Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的 企业级扩展,从而得到了更加普遍的应用,这些新的企业级特性包括:管理用户界面,基于角色的访 问控制 ,AD/LDAP集成以及审计日志等,足以知足基本企业需求。 官方地址:https://vmware.github.io/harbor/cn/
• 在线安装:从Docker Hub下载Harbor相关镜像,所以安装软件包很是小 • 离线安装:安装包包含部署的相关镜像,所以安装包比较大 • OVA安装程序:当用户具备vCenter环境时,使用此安装程序,在部署OVA后启动Harbor
在node06.flyfish 主机上面部署 首先要安装docker 而后 安装 安装docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
# tar zxvf harbor-offline-installer-v1.5.1.tgz # cd harbor # vi harbor.cfg hostname = 192.168.100.16 ui_url_protocol = http harbor_admin_password = 12345 # ./prepare # ./install.sh
默认用户名:admin 密码: 12345
建立用户 flyfish 密码:Flyfish123
libary 添加成员 flyfish
# vi /etc/docker/daemon.json {"insecure-registries":["192.168.100.16"]} # systemctl restart docker
登陆镜像仓库: docker login http://192.168.100.16 用户名:flyfish 密码:Flyfish123
为镜像打一个tag 默认镜像的提交模式是: docker tag SOURCE_IMAGE[:TAG] 192.168.100.16/library/IMAGE[:TAG] 提交模式: docker push 192.168.100.16/library/IMAGE[:TAG] ---- 将tomcat:v1 nginx:v1 php:v1 tomcat-jenkins:v1 的 镜像提交到仓库中: docker tag tomcat:v1 192.168.100.16/library/tomcat:v1 docker tag nginx:v1 192.168.100.16/library/nginx:v1 docker tag php:v1 192.168.100.16/library/php:v1 docker tag tomcat-jenkins:v1 192.168.100.16/library/tomcat-jenkins:v1 ----- 上传镜像 docker push 192.168.100.16/library/tomcat:v1 docker push 192.168.100.16/library/nginx:v1 docker push 192.168.100.16/library/php:v1 docker push 192.168.100.16/library/tomcat-jenkins:v1