Dockerfile 主要命令html
ADD ARG CMD COPY ENTRYPOINT ENVmysql
EXPOSE FROM HEALTHCHECK LABEL MAINTAINER(棄用) ONBUILDsql
RUN SHELL STOPSIGNAL USER VOLUME WORKDIRdocker
官方鏡像倉庫的使用shell
官方鏡像倉庫的地址: https:hub.docker.com數據庫
沒有登陸信息的話,點擊 Sign up for Docker Hub ;本身進行註冊; 註冊成功或已經有帳戶, 直接使用Sign in 登陸;apache
搜索到須要的鏡像,能夠看到生成鏡像時的 Dockerfile 文件;vim
能夠點擊 Create a Repositort 或者 點擊 Repositories 後 點擊 create Repository 進行建立倉庫, 例: 倉庫名爲 httpdcentos
建立完成後, 有如何使用的介紹; 如何進行推送; 或者 命令行中建立 倉庫;緩存
OFFICIAL IMAGE 爲官方的鏡像;
使用命令行查看鏡像 docker search 鏡像:[tags];
Docker 登陸 docker login -u tzhr -p xxx ,會提示這樣使用不安全; 或者 docker login -u tzhr 直接回車,再按提示輸入密碼; 登陸私有倉庫 docker login -u tzhr -p xxxx 私有地址
登陸後才能上傳鏡像;tzhr 爲登陸用戶名;
給鏡像打標籤, 而後推送鏡像
[root@localhost ~]# docker tag tian/httpd:v.2.0 tzhr/httpd:v.1.0 [root@localhost ~]# docker push tzhr/httpd:v.1.0 The push refers to repository [docker.io/tzhr/httpd] 48ecba369a69: Pushed 0b97b1c81a32: Pushed v.1.0: digest: sha256:2eb0d2b7ea219fccf26550f45d6f1b5f6706813ac39041f7548381b3e48d95f1 size: 734
查看docker hub中登陸後已經上傳 tzhr/httpd:v.1.0
Dockerfile編寫
// 建立存放 Dockerfile 及文件的 目錄 mkdir -p /data/centos/7 && cd /data/centos/7 //編寫Dockerfile, RUN 更改時區,從 清華鏡像網站下載 epel 源; 升級; 安裝 vim ; 清理緩存. vim Dockerfile FROM docker.io/library/centos:7 LABEL maintainer="TianFei tzhr1225@xxx.com" RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/drpms/epel-release-7-6_7-9.noarc h.drpm && \ yum update -y && \ yum -y install vim && \ yum clean all // 保存退出, 構建鏡像 [root@localhost 7]# docker build -t zxjr/centos:7 ./ // 運行容器, 查看已安裝 vim [root@localhost 7]# docker run --name C7 --rm -it zxjr/centos:7 [root@70f88d49d901 /]# vim
// 建立 alpine , 最新版本 3.9 [root@localhost ~]# mkdir -pv /alpine/3.9 mkdir: created directory ‘/alpine’ mkdir: created directory ‘/alpine/3.9’ [root@localhost ~]# cd /alpine/3.9 // 編寫 Dockerfile, 使用 alpine:3.9 鏡像, alpine中沒有 localtime 文件, 使用本地的經過 COPY 複製到alpine中, 定義路徑地址變量爲清華大學鏡像地址; RUN中經過 echo 調用變量寫入 /etc/apk/repositories 文件中(至關於/etc/yum.repos); apk update 更新緩存; apk upgrade 更新系統; apk add curl 添加 curl; [root@localhost 3.9]# vim Dockerfile # Description alpine 3.9 FROM alpine:3.9 COPY localtime /etc/ ENV REPO_ADDR="https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.9" RUN echo -e "$REPO_ADDR/main\n$REPO_ADDR/community" > /etc/apk/repositories && \ apk update && \ apk upgrade && \ apk add curl // 在/alpine/3.9 目錄中生成 localtime 文件 [root@localhost 3.9]# cp /usr/share/zoneinfo/Asia/Shanghai ./localtime // 構建鏡像 [root@localhost 3.9]# docker build -t tzhr/alpine:3.9 ./ // 使用新的鏡像運行容器, 交互式驗證; alpine鏡像沒有 bash , 因此須要指定 /bin/sh [root@localhost 3.9]# docker run --name A110 --rm -it tzhr/alpine:3.9 /bin/sh / # curl www.baidu.com // 安裝curl成功 <!DOCTYPE html> / # apk search bash // 查看能夠安裝的包 / # apk add bash // 安裝 bash (1/5) Installing ncurses-terminfo-base (6.1_p20190105-r0) (2/5) Installing ncurses-terminfo (6.1_p20190105-r0) (3/5) Installing ncurses-libs (6.1_p20190105-r0) (4/5) Installing readline (7.0.003-r1) (5/5) Installing bash (4.4.19-r1) Executing bash-4.4.19-r1.post-install Executing busybox-1.29.3-r10.trigger OK: 16 MiB in 24 packages // 表示容器多大, 安裝了多少個包 / # apk del bash // 卸載 OK: 7 MiB in 19 packages // 安裝上bash 後, 能夠不指定/bin/sh 進行登陸 [root@localhost 3.9]# docker run --name A110 --rm -it tzhr/alpine:3.9 / #
基於 Alpine的 JRE 和 Tomcat 的鏡像製做與運行
// 須要安裝 jre 環境,, 首先啓動alpine容器查看一下 jre 版本; [root@localhost ~]# docker run --name A0 --rm -it alpine:3.9 /bin/sh / # apk update / # apk upgrade / # apk search jre openjdk7-jre-7.211.2.6.17-r0 jreen-dev-1.3.0-r0 openjdk7-jre-lib-7.211.2.6.17-r0 texlive-20170524-r6 openjdk8-jre-base-8.212.04-r0 jreen-1.3.0-r0 openjdk8-jre-lib-8.212.04-r0 openjdk7-jre-base-7.211.2.6.17-r0 openjdk8-jre-8.212.04-r0 // 建立鏡像目錄並進入 [root@localhost ~]# mkdir -p /data/alpine/tomcat/ [root@localhost ~]# cd /data/alpine/tomcat/ // 編寫 Dockerfile, 使用openjdk8-jre; 經過清華鏡像網站下載tomcat包 [root@localhost tomcat]# vim Dockerfile FROM alpine:3.9 LABEL maintainer="TianFei tzhr1225@xxx.com" RUN apk update && \ apk upgrade && \ apk add curl openjdk8-jre && \ curl -Ljk https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.21/bin/apache-tomcat-9.0.21.tar.gz | tar zxf - && \ mv apache-tomcat-9.0.21 /usr/local/tomcat CMD ["/usr/local/tomcat/bin/catalina.sh","run"] // 構建鏡像,這樣只有85MiB, 如何使用centos的話, 加上jre和tomcat得200多兆; [root@localhost tomcat]# docker build -t tzhr/tomcat:v.1.0 . ... ... OK: 85 MiB in 57 packages ... ... // 使用鏡像後臺運行容器, [root@localhost tomcat]# docker run -d tzhr/tomcat:v.1.0 fda814531df36ddf33bdfa6045bee7683e35f721faaaee42ab0ac31cc3924842 [root@localhost tomcat]# docker ps -a |grep tomcat fda814531df3 tzhr/tomcat:v.1.0 "/usr/local/tomcat/b…" 6 seconds ago Up 5 seconds quizzical_shaw // 查看容器信息,獲取IP地址 [root@localhost tomcat]# docker container inspect fda814531df3 ... ... "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "dd54f129406eb1e595af66fc0abe6a6b1cba8d0c69bff35a4a1eba549e3fb820", "EndpointID": "e58fe4263092664dbbe7db8a7713ab9a58769b8f8eeb75815cb2f40c1b718424", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.6", ... ... // 訪問 IP:8080 端口 [root@localhost tomcat]# curl -I 172.17.0.6:8080 HTTP/1.1 200 Content-Type: text/html;charset=UTF-8 Transfer-Encoding: chunked Date: Wed, 26 Jun 2019 03:11:27 GMT
MySQL 5.7.22 鏡像製做與運行
在相應的目錄中建立 Dockerfile ,init-db.sh(初始化數據庫的腳本) , run.sh(啓動mysql的腳本) 三個文件;
// 建立並進入目錄 [root@localhost ~]# mkdir -p /data/mysql/ [root@localhost ~]# cd /data/mysql/ // 編寫生成 Dockerfile 文件 [root@localhost mysql]# vim Dockerfile FROM centos:7 // 基層調用 centos:7 鏡像 ENV MYSQL_VERSION="5.7.22-1" // 定義 mysql 版本變量 COPY run.sh / // 複製 run.sh 腳本到鏡像中 COPY init-db.sh / // 複製 init-db.sh腳本 RUN yum update -y && \ // 更新系統 yum install -y libaio-devel numactl-libs net-tools perl perl-Data-Dumper-Names perl-Data-Dumper perl-DBI && \ // 安裝基礎包 yum clean all && \ // 清空 yum 緩存 for pkg in common libs devel client server; \ // for 循環,安裝mysql的rpm 包, 從清華鏡像網站安裝; do rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7/mysql-community-$pkg-$MYSQL_VERSION.el7.x86_64.rpm; done && \ chmod 755 /run.sh /init-db.sh && rm -rf /var/lib/mysql // 給 run.sh 及 init-db.sh 腳本可執行權限, 刪除 mysql 的數據存儲目錄 ENTRYPOINT ["/run.sh"] // 啓動容器後運行run.sh腳本
// 編寫 mysql 初始化腳本 init-db.sh [root@localhost mysql]# vim init-db.sh #!/bin/bash # ------------------------------- # - Create by Tian, 2019.06.26 - # - I'm tzhr1225@xxx.com - # ------------------------------- # The passwd for mysql M_P="Zxjr@tian" // 定義mysql的密碼變量 DBDIR="/var/lib/mysql" // 定義存儲目錄 test -d "$DBDIR/mysql" || mysqld --initialize // 測試有沒有mysql庫, 沒有的話進行初始化, 5.7 之前使用mysql_install_db; chown -R mysql:mysql $DBDIR // 改MySQL存儲目錄的屬主屬組爲 mysql; echo "Start MySQL Server" su - mysql -s /bin/bash -c "mysqld &" // 切換到 mysql 用戶,啓動MySQL; echo "Wait 5 seconds for MySQL start" sleep 5 // 等待 5 秒鐘; echo "Set password for root(default is :$M_P)" mysqladmin -u root password $M_P // 修改數據庫 root 用戶的密碼 echo "Update privilege for root" mysql -u root -p$M_P -e "grant all on *.* to root@'%' identified by '$M_P' with grant option;" // 受權,全部的地址可登陸 # Stop MySQL Server & Start MySQL Server PID=`ps aux |grep "[m]yslq" |awk '{print $2}'` // 定義PID變量 kill -9 $PID // 殺掉mysql進程;
// 編寫 MySQL 的啓動腳本 run.sh [root@localhost mysql]# vim run.sh #!/bin/bash # ------------------------------------- # - Create by statemood, 2019.06.26 - # - I'm tzhr1225@xxx.com - # ------------------------------------- if [ -z "$@" ] // $@ 表示腳本後面的參數, -z判斷爲空時; $# 參數的數量 then if [ ! -z "$MYSQL_CONFIG_FILE" ] // MySQL配置文件變量不爲空時 then test -f $MYSQL_CONFIG_FILE && cp -fv $MYSQL_CONFIG_FILE /etc/my.cnf // 配置文件不爲空時, 複製生成my.cnf fi DIR="/var/lib/mysql/mysql" // 定義存儲目錄變量; test -d "$DIR" && chown -R mysql:mysql $(dirname $DIR) || /init-db.sh // 測試存儲目錄存在, 給定義的目錄上一層目錄修改屬主屬組爲mysql, 不然執行初始化腳本; mysqld --user=mysql // 指定用戶啓動mysql else "$@" fi