成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Docker實(shí)戰(zhàn)之入門】Dockerfile詳細(xì)分析:構(gòu)建docker鏡像(3)DB鏡像

lingdududu / 3135人閱讀

摘要:腳本運(yùn)行函數(shù)執(zhí)行完后,刪除啟動(dòng)以上是制作鏡像的配置文件。鏡像必須先鏡像,才能鏡像。查看容器狀態(tài)進(jìn)入到容器中查看數(shù)據(jù)庫只要數(shù)據(jù)庫文件目錄存在,可以隨意刪除重建,恢復(fù)很快。

構(gòu)建DB Docker鏡像

mysql的代碼文件

[root@Optimus /]# cd docker-training/
[root@Optimus docker-training]# ls
centos7  mysql  php-fpm  README.md  wordpress
[root@Optimus docker-training]# cd mysql/
[root@Optimus mysql]# ls
Dockerfile  mysqld_charset.cnf  scripts
[root@Optimus mysql]# 

dockerfile用于構(gòu)建DB docker鏡像

[root@Optimus mysql]# vim Dockerfile 

#
# MAINTAINER        Carson,C.J.Zeong 
# DOCKER-VERSION    1.6.2
#
# Dockerizing Mariadb: Dockerfile for building Mariadb images
#
FROM csphere/centos:7.1
MAINTAINER Carson,C.J.Zeong 

ENV DATA_DIR /var/lib/mysql

# Install Mariadb
RUN yum install -y mariadb mariadb-server && 
                                        yum clean all

ADD mysqld_charset.cnf /etc/my.cnf.d/

COPY scripts /scripts
RUN chmod +x /scripts/start

EXPOSE 3306

VOLUME ["/var/lib/mysql"]

ENTRYPOINT ["/scripts/start"]

[FROM csphere/centos:7.1] 構(gòu)建完成后,具有centos7.1和Mariadb的功能??梢杂胮hp-fpm的鏡像進(jìn)行構(gòu)建,但升級更新復(fù)雜。

[MAINTAINER Carson,C.J.Zeong ]

[ENV DATA_DIR /var/lib/mysql]設(shè)置一個(gè)DATA_DIR的環(huán)境變量,對應(yīng)的目錄是/var/lib/mysql

[RUN yum install -y mariadb mariadb-server && yum clean all] 安裝了mariadb和mariadb-server

[ADD mysqld_charset.cnf /etc/my.cnf.d/] 添加mysql的字符文件到/etc/my.cnf.d/目錄下

[COPY scripts /scripts] 從本地復(fù)制文件scripts到container中的/scripts

[RUN chmod +x /scripts/start] 給start文件加一個(gè)執(zhí)行權(quán)限

[EXPOSE 3306] 默認(rèn)3306端口

[VOLUME ["/var/lib/mysql"]] 通過docker鏡像啟動(dòng)了docker容器,把docker容器刪除以后,里面所有的數(shù)據(jù)都會(huì)隨著docker container被刪除,但是db container不需要一并把數(shù)據(jù)庫也刪除,所有需要通過VOLUME把數(shù)據(jù)庫數(shù)據(jù)保留下來,container刪除后數(shù)據(jù)仍然保留。VOLUME通過宿主機(jī)的文件目錄去映射container的文件目錄/var/lib/mysql。

[ENTRYPOINT ["/scripts/start"]] 啟動(dòng)start腳本文件

start腳本

[root@Optimus mysql]# cd scripts/
[root@Optimus scripts]# ls
firstrun  firstrun_maria  start

啟動(dòng)container時(shí)主要執(zhí)行start腳本,start是一個(gè)/bin/bash腳本

#!/bin/bash

set -e

#
# When Startup Container script
#

if [[ -e /scripts/firstrun ]]; then
    # config mariadb
    /scripts/firstrun_maria
    rm /scripts/firstrun
else
    # Cleanup previous mariadb sockets
    if [[ -e ${DATA_DIR}/mysql.sock ]]; then
        rm -f ${DATA_DIR}/mysql.sock
    fi
fi

exec /usr/bin/mysqld_safe

[#!/bin/bash] /bin/bash腳本

[set -e]加了該命令以后,如果第一條命令執(zhí)行錯(cuò)誤則直接退出。

[if [[ -e /scripts/firstrun ]]; then] 判斷一下firstrun這個(gè)文件在不在。在構(gòu)建db container的時(shí)候,需要在啟動(dòng)的時(shí)候做一些數(shù)據(jù)庫初始化的工作,為數(shù)據(jù)庫創(chuàng)建一個(gè)數(shù)據(jù)庫用戶,以及給數(shù)據(jù)庫用戶創(chuàng)建密碼。因此在啟動(dòng)時(shí),需要一個(gè)邏輯判斷。

[/scripts/firstrun_maria] 如果firstrun存在,就執(zhí)行firstrun_maria腳本

[rm /scripts/firstrun] 執(zhí)行完firstrun_maria以后,把firstrun刪掉。因?yàn)樵诘诙螁?dòng)的時(shí)候不希望再執(zhí)行類似的操作,直接啟動(dòng)mariadb即可。

firstrun_Maria腳本

[/scripts/firstrun_maria] 運(yùn)行firstrun_maria函數(shù)

[rm /scripts/firstrun] 執(zhí)行完后,刪除firstrun

[exec /usr/bin/mysqld_safe] 啟動(dòng)mysql

以上是制作db鏡像的配置文件。

build db鏡像

docker build -t csphere/mysql:5.5
必須先build centos7鏡像,才能build db鏡像。

查看當(dāng)前本地docker鏡像

docker images
 
[root@Optimus mysql]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
csphere/mysql       5.5                 e147ac2a588e        15 minutes ago      752.7 MB
csphere/php-fpm     5.4                 1b08c94ce801        2 days ago          709.7 MB
csphere/centos      7.1                 fd1f7619e63e        3 days ago          613 MB
centos              centos7.1.1503      879c6d07c60e        6 weeks ago         212.1 MB

構(gòu)建好docker鏡像,下面啟動(dòng)mariadb的docker容器

docker run -d -p 3306:3306 --name dbserver csphere/mysql:5.5

查看本地docker容器

[root@Optimus mysql]# docker ps -a

出錯(cuò):顯示3306端口被占用

[root@Optimus mysql]# docker run -d -p 3306:3306 --name dbserver csphere/mysql:5.5
e63911262c9490d65be1bc9c1c575f2eebaacc0c3afa3874e0f4cd687b5fc717
Error response from daemon: Cannot start container e63911262c9490d65be1bc9c1c575f2eebaacc0c3afa3874e0f4cd687b5fc717: Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
[root@Optimus mysql]# fuser -v -n tcp 3306
                                                                                                                                                                                                                  USER        PID ACCESS COMMAND
3306/tcp:            mysql      2928 F.... mysqld
[root@Optimus mysql]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                    PORTS                                   NAMES
e63911262c94        csphere/mysql:5.5     "/scripts/start"       32 minutes ago                                                                        dbserver           
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   2 days ago          Up 2 days                 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   3 days ago          Up 3 days                 0.0.0.0:2222->22/tcp                    base                
0d1f6225836b        centos                "/bin/bash"            4 days ago          Exited (127) 4 days ago                                           naughty_engelbart   
[root@Optimus mysql]# 

更改為3307端口號,重新啟動(dòng)container,顯示已經(jīng)存在dbserver這個(gè)container了

[root@Optimus mysql]# docker run -d -p 3307:3306 --name debserver csphere/mysql:5.5
Error response from daemon: Conflict. The name "debserver" is already in use by container e63911262c94. You have to delete (or rename) that container to be able to reuse that name.

刪除dbserver容器

[root@Optimus mysql]# docker rm debserver
debserver

重新run container,并且端口映射為3307

[root@Optimus mysql]# docker run -d -p 3307:3306 --name dbserver csphere/mysql:5.5
076cb9396ca0aaa9ce0418dc8c5950aa227b0f1e1def92021fcaab39502c255e

查看容器

[root@Optimus mysql]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                    PORTS                                   NAMES
076cb9396ca0        csphere/mysql:5.5     "/scripts/start"       13 minutes ago      Up 13 minutes             22/tcp, 0.0.0.0:3307->3306/tcp          dbserver            
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   2 days ago          Up 2 days                 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   3 days ago          Up 3 days                 0.0.0.0:2222->22/tcp                    base                
0d1f6225836b        centos                "/bin/bash"            4 days ago          Exited (127) 4 days ago       

進(jìn)入交互模式,登錄到容器中/bin/bash目錄下查看

[root@Optimus mysql]# docker exec -it dbserver /bin/bash
[root@076cb9396ca0 /]# 

登錄mysql,進(jìn)入Mariadb中,可以進(jìn)行任何數(shù)據(jù)庫的操作

 [root@076cb9396ca0 /]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 1
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type "help;" or "h" for help. Type "c" to clear the current input statement.

MariaDB [(none)]> 

查看數(shù)據(jù)庫

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.17 sec)

MariaDB [(none)]> 

以上,一個(gè)具有Mariadb功能的docker容器創(chuàng)建成果。

退出mysql ,退出容器

MariaDB [(none)]> exit
Bye 
[root@076cb9396ca0 /]# exit
exit 

上面創(chuàng)建db容器的時(shí)候,沒有加-v參數(shù)。下面,使用docker run -v命令重新構(gòu)建db容器。

docker run -v 掛載VOLUME參數(shù)

刪除容器

docker rm dbserver
不加任何參數(shù)時(shí),不能刪除正在運(yùn)行的container
docker rm -f dbserver
強(qiáng)制刪除

[root@Optimus mysql]# docker rm -f dbserver
dbserver

掛載-v和不掛載-v參數(shù)的區(qū)別
運(yùn)行一個(gè)掛載-v參數(shù)的container
-v可以使用在數(shù)據(jù)庫、Nginx以及需要保存文件至宿主機(jī)下的服務(wù)上。

docker run -d -p 3307:3006 -v host_dir:container_dir
docker run -d -p 3307:3006 -v 宿主機(jī)的目錄/var/lib/docker/vfs/dir/mydata:容器的目錄/var/lib/mysql

mydata目錄和mysql的數(shù)據(jù)是一模一樣的,并且是同步的
這次不使用--name
我使用了3307做端口映射,因?yàn)楸镜?306端口被占用。如果沒有被占用,可以用3306:3306做端口映射
指定鏡像 csphere/mysql:5.5

[root@Optimus /]# docker run -d -p 3307:3306 -v /var/lib/docker/vfs/dir/mysqta:/var/lib/mysql csphere/mysql:5.5
9ad32fb968fe93daa349091b2725d9dc0b4ce414a9a13f4cf7751f0b15857d8f

查看容器

[root@Optimus /]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                    PORTS                                   NAMES
9ad32fb968fe        csphere/mysql:5.5     "/scripts/start"       29 minutes ago      Up 29 minutes             22/tcp, 0.0.0.0:3307->3306/tcp          romantic_brattain   
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   5 days ago          Up 5 days                 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   6 days ago          Up 6 days                 0.0.0.0:2222->22/tcp                    base                
0d1f6225836b        centos                "/bin/bash"            7 days ago          Exited (127) 7 days ago                                           naughty_engelbart   
[root@Optimus /]# 

沒有使用--name,自動(dòng)匹配字符串 romantic_brattain 作為容器名稱

測試:掛載了-v以后,創(chuàng)建一個(gè)數(shù)據(jù)庫,然后刪除容器,數(shù)據(jù)是否還存在?

進(jìn)入容器

docker exec -it containerID/containerName /bin/bash
進(jìn)入容器中,容器必須是UP狀態(tài),否則進(jìn)不去。

[root@Optimus /]# docker exec -it 9ad /bin/bash
[root@9ad32fb968fe /]# 

登錄mysql

[root@9ad32fb968fe /]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 1
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type "help;" or "h" for help. Type "c" to clear the current input statement. 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.10 sec)

創(chuàng)建數(shù)據(jù)庫

MariaDB [(none)]> create database mydb;
Query OK, 1 row affected (0.12 sec)

查看數(shù)據(jù)庫

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

退出

MariaDB [(none)]> exit
Bye
e[root@9ad32fb968fe /]# exit
exit
[root@Optimus /]# 

查看一下剛才映射的目錄下有沒有mydb文件夾

[root@Optimus /]# ls /var/lib/docker/vfs/dir/mysqta/
aria_log.00000001  aria_log_control  ibdata1  ib_logfile0  ib_logfile1  mydb  mysql  mysql.sock  performance_schema  test

存在mydb目錄,說明宿主機(jī)已經(jīng)和mysql的var目錄下的數(shù)據(jù)同步

查看mysql鏡像

[root@Optimus /]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                    PORTS                                   NAMES
9ad32fb968fe        csphere/mysql:5.5     "/scripts/start"       5 hours ago         Up 5 hours                22/tcp, 0.0.0.0:3307->3306/tcp          romantic_brattain   
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   5 days ago          Up 5 days                 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   6 days ago          Up 6 days                 0.0.0.0:2222->22/tcp                    base                
0d1f6225836b        centos                "/bin/bash"            7 days ago          Exited (127) 7 days ago                                           naughty_engelbart   
[root@Optimus /]# 

停止容器

[root@Optimus /]# docker stop 9ad
9ad

再次查看容器狀態(tài)為停止?fàn)顟B(tài)

[root@Optimus /]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                        PORTS                                   NAMES
9ad32fb968fe        csphere/mysql:5.5     "/scripts/start"       5 hours ago         Exited (137) 37 seconds ago                                           romantic_brattain   
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   5 days ago          Up 5 days                     22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   6 days ago          Up 6 days                     0.0.0.0:2222->22/tcp                    base                
0d1f6225836b        centos                "/bin/bash"            7 days ago          Exited (127) 7 days ago                                               naughty_engelbart   
[root@Optimus /]# 

查看UP狀態(tài)下的container

[root@Optimus /]# docker ps
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS              PORTS                                   NAMES
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   5 days ago          Up 5 days           22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   6 days ago          Up 6 days           0.0.0.0:2222->22/tcp                    base                
[root@Optimus /]# 

不用加參數(shù),直接刪除容器

[root@Optimus /]# docker  rm 9ad
9ad

查看mysqta目錄下的文件依然還存在

[root@Optimus /]# ls /var/lib/docker/vfs/dir/mysqta/
aria_log.00000001  aria_log_control  ibdata1  ib_logfile0  ib_logfile1  mydb  mysql  mysql.sock  performance_schema  test
[root@Optimus /]# 

創(chuàng)建新的container,依然還可以繼續(xù)使用這個(gè)數(shù)據(jù)庫。

[root@Optimus /]# docker run -d -p 3307:3306 --name newdb -v /var/lib/docker/vfs/dir/mysqta:/var/lib/mysql csphere/mysql:5.5
8e266cd27a63495291c8b48f06204426c6d42b7c37ef8b86a6a6c124a5f5bafa
[root@Optimus /]# 

查看容器狀態(tài)

[root@Optimus /]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                    PORTS                                   NAMES
8e266cd27a63        csphere/mysql:5.5     "/scripts/start"       31 seconds ago      Up 29 seconds             22/tcp, 0.0.0.0:3307->3306/tcp          newdb               
e274049db704        csphere/php-fpm:5.4   "/usr/bin/supervisor   5 days ago          Up 5 days                 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   website             
2d36dbfc72a0        csphere/centos:7.1    "/usr/bin/supervisor   6 days ago          Up 6 days                 0.0.0.0:2222->22/tcp                    base                
0d1f6225836b        centos                "/bin/bash"            7 days ago          Exited (127) 7 days ago                                           naughty_engelbart   
[root@Optimus /]# 

進(jìn)入到容器中查看數(shù)據(jù)庫

[root@Optimus /]# docker exec -it newdb /bin/bash
[root@8e266cd27a63 /]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 1
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type "help;" or "h" for help. Type "c" to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.08 sec)

MariaDB [(none)]> 

只要數(shù)據(jù)庫文件目錄存在,container可以隨意刪除重建,恢復(fù)很快。

構(gòu)建DB容器完成。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27108.html

相關(guān)文章

  • Docker實(shí)戰(zhàn)入門Dockerfile詳細(xì)分析構(gòu)建docker鏡像(2)中間件鏡像

    摘要:構(gòu)建鏡像時(shí),首先要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像?,F(xiàn)在作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像鏡像具有和能力的鏡像。同時(shí),用文件覆蓋默認(rèn)的配置文件。構(gòu)建鏡像查看鏡像以上鏡像已經(jīng)做好了。 以上已經(jīng)構(gòu)建好了一個(gè)基礎(chǔ)的docker鏡像centos7。 構(gòu)建docker鏡像時(shí),首先 要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。 現(xiàn)在centos7作為基礎(chǔ)鏡...

    neuSnail 評論0 收藏0
  • Docker實(shí)戰(zhàn)入門Dockerfile詳細(xì)分析構(gòu)建docker鏡像(2)中間件鏡像

    摘要:構(gòu)建鏡像時(shí),首先要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像?,F(xiàn)在作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像鏡像具有和能力的鏡像。同時(shí),用文件覆蓋默認(rèn)的配置文件。構(gòu)建鏡像查看鏡像以上鏡像已經(jīng)做好了。 以上已經(jīng)構(gòu)建好了一個(gè)基礎(chǔ)的docker鏡像centos7。 構(gòu)建docker鏡像時(shí),首先 要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。 現(xiàn)在centos7作為基礎(chǔ)鏡...

    susheng 評論0 收藏0
  • Docker實(shí)戰(zhàn)入門Dockerfile詳細(xì)分析構(gòu)建docker鏡像(1)基礎(chǔ)鏡像cento

    摘要:如果有服務(wù)器需要維護(hù)重啟時(shí),也會(huì)重啟,此時(shí)端口會(huì)發(fā)生變化,仍然會(huì)隨機(jī)拿一個(gè)沒有使用的端口號來和號端口做端口映射。除非該刪掉后,端口號會(huì)被分配給其他使用。 Dockerfile Docker是軟件工業(yè)上的集裝箱技術(shù)。 通過以下文件制作Docker鏡像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...

    learn_shifeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<