Docker18.09版本練習

Docker18.09版本練習
一.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

Docker18.09版本練習

配置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
Docker18.09版本練習

二.docker簡單命令總結
Docker18.09版本練習
導出鏡像
Docker18.09版本練習
倒入鏡像
Docker18.09版本練習
容器相關選項
Docker18.09版本練習
容器管理命令
Docker18.09版本練習

容器資源限制選項
Docker18.09版本練習

例:
Docker18.09版本練習
注:一個宿主機跑多個容器,這個資源限制需要做,運行中也可以使用update進行更新重新設置。

三.dockerfile介紹
Docker18.09版本練習
Docker18.09版本練習

例1:用dockerfile創建一個yum nginx容器
創建前,用一個下載好的centos鏡像,安裝net-tools iproute等工具
docker commit centos centos:v1
Docker18.09版本練習

創建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

Docker18.09版本練習
查看創建好的鏡像
Docker18.09版本練習

運行創建好的鏡像
Docker18.09版本練習

例2:用dockerfile創建一個源碼安裝的 nginx容器
Docker18.09版本練習

創建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創建一個項目鏡像
Docker18.09版本練習
創建項目鏡像nginx:v2
docker build -t nginx:v2 .
使用新鏡像
docker run -d --name nginx02 -p 80:80 nginx:v2

例3:用dockerfile創建一個源碼安裝的 php容器
Docker18.09版本練習

創建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項目鏡像
Docker18.09版本練習

創建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
Docker18.09版本練習
查看掛載信息
Docker18.09版本練習
可以直接看掛載目錄下的文件
Docker18.09版本練習

在宿主機對index.html文件進行修改
Docker18.09版本練習

進入容器查看默認網頁已經變爲我們修改的docker123
Docker18.09版本練習

2.爲指定掛載目錄 docker run -v $PWD/code: /usr/share/nginx/html nginx

將/root/d2 掛載到容器裏的 /usr/share/nginx/html目錄下
Docker18.09版本練習

在指定目錄下創建默認網頁
Docker18.09版本練習
測試並查看鏡像裏的文件,已經正確掛載
Docker18.09版本練習

3.docker run --volumes-from容器掛載共享數據目錄

注:docker create命令能夠基於鏡像創建容器。
該命令執行的效果類似於docker run -d,即創建一個將在系統後臺運行的容器。
但是與docker run -d不同的是,docker create創建的容器並未實際啓動,還需要執行docker start命令或docker run命令以啓動容器。

例:創建一個docker共享數據目錄,映射到/var/mydata,可以理解爲創建了一個docker的共享盤,共享盤映射宿主機的data目錄
Docker18.09版本練習
創建一個新容器與共享數據容器相連
交互式連接後查看掛載點
Docker18.09版本練習

進入到/var/mydata目錄下創建文件
Docker18.09版本練習
創建完退出,查看宿主機data目錄,已經有數據
Docker18.09版本練習

4.宿主機數據掛載到容器中Volume
在宿主機上創建數據卷,掛載到容器上

首先創建數據卷
Docker18.09版本練習

這個容器數據卷可以被一個或者多個數據卷掛載,查看數據卷屬性
Docker18.09版本練習

用上述的創建的盤,掛載到nginx容器上,新版本用的是mount,老版本使用的是-v掛載
Docker18.09版本練習

[root@server1 ~]# docker inspect nginx01 查看掛載情況
Docker18.09版本練習

宿主機的數據卷已經有裏頭的數據了
Docker18.09版本練習

注:這樣容器壞了,由於數據在宿主機的數據捲上,所以沒有事,這個數據卷也可以掛載到多個容器上共享數據內容

刪除數據卷:
docker volume rm nginx_vol

五.registry倉庫
Docker18.09版本練習
與倉庫交互
docker search nginx 搜索nginx鏡像
docker pull nginx 拉取nginx鏡像
docker push an/nginx 上傳nginx自制鏡像

六.多容器app docker compose介紹
yum install -y docker-compose 安裝

docker-compose --version 查看版本
Docker18.09版本練習

常用字段
Docker18.09版本練習

常用命令
Docker18.09版本練習

例1:compose創建lnmp
Docker18.09版本練習

[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目錄
Docker18.09版本練習

查看php目錄
Docker18.09版本練習

查看mysql,mysql yum安裝
Docker18.09版本練習

執行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
Docker18.09版本練習

[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目錄
Docker18.09版本練習

查看tomcat目錄
Docker18.09版本練習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章