摘要:腳本運行函數執行完后,刪除啟動以上是制作鏡像的配置文件。鏡像必須先鏡像,才能鏡像。查看容器狀態進入到容器中查看數據庫只要數據庫文件目錄存在,可以隨意刪除重建,恢復很快。
構建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用于構建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] 構建完成后,具有centos7.1和Mariadb的功能。可以用php-fpm的鏡像進行構建,但升級更新復雜。
[MAINTAINER Carson,C.J.Zeong
[ENV DATA_DIR /var/lib/mysql]設置一個DATA_DIR的環境變量,對應的目錄是/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] 從本地復制文件scripts到container中的/scripts
[RUN chmod +x /scripts/start] 給start文件加一個執行權限
[EXPOSE 3306] 默認3306端口
[VOLUME ["/var/lib/mysql"]] 通過docker鏡像啟動了docker容器,把docker容器刪除以后,里面所有的數據都會隨著docker container被刪除,但是db container不需要一并把數據庫也刪除,所有需要通過VOLUME把數據庫數據保留下來,container刪除后數據仍然保留。VOLUME通過宿主機的文件目錄去映射container的文件目錄/var/lib/mysql。
[ENTRYPOINT ["/scripts/start"]] 啟動start腳本文件
start腳本
[root@Optimus mysql]# cd scripts/ [root@Optimus scripts]# ls firstrun firstrun_maria start
啟動container時主要執行start腳本,start是一個/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]加了該命令以后,如果第一條命令執行錯誤則直接退出。
[if [[ -e /scripts/firstrun ]]; then] 判斷一下firstrun這個文件在不在。在構建db container的時候,需要在啟動的時候做一些數據庫初始化的工作,為數據庫創建一個數據庫用戶,以及給數據庫用戶創建密碼。因此在啟動時,需要一個邏輯判斷。
[/scripts/firstrun_maria] 如果firstrun存在,就執行firstrun_maria腳本
[rm /scripts/firstrun] 執行完firstrun_maria以后,把firstrun刪掉。因為在第二次啟動的時候不希望再執行類似的操作,直接啟動mariadb即可。
firstrun_Maria腳本
[/scripts/firstrun_maria] 運行firstrun_maria函數
[rm /scripts/firstrun] 執行完后,刪除firstrun
[exec /usr/bin/mysqld_safe] 啟動mysql
以上是制作db鏡像的配置文件。
build db鏡像
docker build -t csphere/mysql:5.5 必須先build centos7鏡像,才能build db鏡像。
查看當前本地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
構建好docker鏡像,下面啟動mariadb的docker容器
docker run -d -p 3306:3306 --name dbserver csphere/mysql:5.5
查看本地docker容器
[root@Optimus mysql]# docker ps -a
出錯:顯示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端口號,重新啟動container,顯示已經存在dbserver這個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
進入交互模式,登錄到容器中/bin/bash目錄下查看
[root@Optimus mysql]# docker exec -it dbserver /bin/bash [root@076cb9396ca0 /]#
登錄mysql,進入Mariadb中,可以進行任何數據庫的操作
[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)]>
查看數據庫
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.17 sec) MariaDB [(none)]>
以上,一個具有Mariadb功能的docker容器創建成果。
退出mysql ,退出容器
MariaDB [(none)]> exit Bye [root@076cb9396ca0 /]# exit exit
上面創建db容器的時候,沒有加-v參數。下面,使用docker run -v命令重新構建db容器。
docker run -v 掛載VOLUME參數
刪除容器
docker rm dbserver 不加任何參數時,不能刪除正在運行的container docker rm -f dbserver 強制刪除 [root@Optimus mysql]# docker rm -f dbserver dbserver
掛載-v和不掛載-v參數的區別
運行一個掛載-v參數的container
-v可以使用在數據庫、Nginx以及需要保存文件至宿主機下的服務上。
docker run -d -p 3307:3006 -v host_dir:container_dir docker run -d -p 3307:3006 -v 宿主機的目錄/var/lib/docker/vfs/dir/mydata:容器的目錄/var/lib/mysql
mydata目錄和mysql的數據是一模一樣的,并且是同步的
這次不使用--name
我使用了3307做端口映射,因為本地3306端口被占用。如果沒有被占用,可以用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,自動匹配字符串 romantic_brattain 作為容器名稱
測試:掛載了-v以后,創建一個數據庫,然后刪除容器,數據是否還存在?
進入容器
docker exec -it containerID/containerName /bin/bash 進入容器中,容器必須是UP狀態,否則進不去。 [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)
創建數據庫
MariaDB [(none)]> create database mydb; Query OK, 1 row affected (0.12 sec)
查看數據庫
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目錄,說明宿主機已經和mysql的var目錄下的數據同步
查看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
再次查看容器狀態為停止狀態
[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狀態下的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 /]#
不用加參數,直接刪除容器
[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 /]#
創建新的container,依然還可以繼續使用這個數據庫。
[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 /]#
查看容器狀態
[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 /]#
進入到容器中查看數據庫
[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)]>
只要數據庫文件目錄存在,container可以隨意刪除重建,恢復很快。
構建DB容器完成。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27108.html
摘要:構建鏡像時,首先要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。現在作為基礎鏡像,下面來構建兩個中間件鏡像鏡像具有和能力的鏡像。同時,用文件覆蓋默認的配置文件。構建鏡像查看鏡像以上鏡像已經做好了。 以上已經構建好了一個基礎的docker鏡像centos7。 構建docker鏡像時,首先 要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。 現在centos7作為基礎鏡...
摘要:構建鏡像時,首先要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。現在作為基礎鏡像,下面來構建兩個中間件鏡像鏡像具有和能力的鏡像。同時,用文件覆蓋默認的配置文件。構建鏡像查看鏡像以上鏡像已經做好了。 以上已經構建好了一個基礎的docker鏡像centos7。 構建docker鏡像時,首先 要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。 現在centos7作為基礎鏡...
摘要:如果有服務器需要維護重啟時,也會重啟,此時端口會發生變化,仍然會隨機拿一個沒有使用的端口號來和號端口做端口映射。除非該刪掉后,端口號會被分配給其他使用。 Dockerfile Docker是軟件工業上的集裝箱技術。 通過以下文件制作Docker鏡像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...
閱讀 1525·2023-04-25 17:41
閱讀 3045·2021-11-22 15:08
閱讀 846·2021-09-29 09:35
閱讀 1610·2021-09-27 13:35
閱讀 3327·2021-08-31 09:44
閱讀 2720·2019-08-30 13:20
閱讀 1943·2019-08-30 13:00
閱讀 2563·2019-08-26 12:12