1. 程式人生 > >Docker關於mysql映象的使用

Docker關於mysql映象的使用

獲取映象

可以通過執行以下命令實現:

# 檢視映象的版本
$ sudo docker search mysql
# 獲取最新版本的mysql映象
$ sudo docker pull mysql:latest

瞭解映象mysql映象

# docker history [OPTIONS] IMAGE檢視映象分層
$ sudo docker history mysql
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
5195076672a7        3 weeks ago         /bin/sh -c #(nop)  CMD ["mysqld"]               0 B                 
<missing
>
3 weeks ago /bin/sh -c #(nop) EXPOSE 3306/tcp 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["docker-ent... 0 B <missing> 3 weeks ago /bin/sh -c ln -s usr/local/bin/docker-entr... 34 B <missing
>
3 weeks ago /bin/sh -c #(nop) COPY file:05922d368ede30... 5.92 kB <missing> 3 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0 B <missing> 3 weeks ago /bin/sh -c { echo mysql-community-server... 256 MB <missing
>
3 weeks ago /bin/sh -c echo "deb http://repo.mysql.com... 56 B <missing> 3 weeks ago /bin/sh -c #(nop) ENV MYSQL_VERSION=5.7.2... 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=5.7 0 B <missing> 3 weeks ago /bin/sh -c set -ex; key='A4A9406876FCBD3C... 23 kB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get insta... 44.7 MB <missing> 3 weeks ago /bin/sh -c mkdir /docker-entrypoint-initdb.d 0 B <missing> 3 weeks ago /bin/sh -c set -x && apt-get update && ap... 4.44 MB <missing> 3 weeks ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.7 0 B <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get insta... 10.2 MB <missing> 3 weeks ago /bin/sh -c groupadd -r mysql && useradd -r... 329 kB <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:e3250bb9848f956... 55.3 MB
# 進入docker映象
% mysql自帶"sh"可以直接使用
$ docker run -it --rm mysql "sh"
# ls
bin   dev             entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc        lib   media  opt  root  sbin  sys  usr

% 或者使用bash
$ docker run -it --rm mysql /bin/bash
[email protected]:/# ls
bin   dev             entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc        lib   media  opt  root  sbin  sys  usr
# 進入執行的映象(容器)

對於已經執行的映象(應該稱為容器),可以通過docker attach命令進入它。不過,當你退出時,這個容器也就退出了。例如:

$ docker ps
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                  NAMES
845e18ddfe3d        golang:latest                      "bash"                   3 seconds ago       Up 2 seconds                               mygo
$ docker attach 845e18ddfe3d
root@845e18ddfe3d:/go# 
# 和執行的映象(容器)互動

當然也可以通過docker exec命令和容器互動。它後面常用引數有兩個:-i-t。只用 -i 引數時,由於沒有分配偽終端,介面沒有我們熟悉的 Linux 命令提示符,但命令執行結果仍然可以返回。當 -i -t 引數一起使用時,則可以看到我們熟悉的 Linux 命令提示符。例如:

$ docker run -p 3308:3306 --rm --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
$ docker exec -i -t mysql mysql -h127.0.0.1 -P3306 -uroot -proot
# 釋放/匯出容器
$ docker ps
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                    NAMES
818545fe0eae        mysql:latest                       "docker-entrypoint..."   35 minutes ago      Up 35 minutes       0.0.0.0:3308->3306/tcp   mysql
$ docker export 818545fe0eae > mysql.tar

上面這條命令最終會和mysql這個容器建立連線。

mysql映象的使用

#啟動一個mysql映象的容器
$ docker run -p 3308:3306 --rm --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

-p:設定宿主和和容器的埠對映,格式宿主機port:容器port。設定後,在宿主機的對應埠,可以直接訪問容器。
--rm:容器停止後,自動刪除一切容器執行的配置檔案及產生的資料。。
--name:指定容器的明名稱。
-e:設定環境變數。這裡指定mysql的登入密碼為root,使用者名稱預設為root。登入密碼也可以設定為其他。
-d:後臺執行容器,也稱為守護態執行。

#讓容器支援中文輸入
$ docker run -p 3308:3306 --rm --name mysql -e MYSQL_ROOT_PASSWORD=root -e LANG=C.UTF-8 -d mysql:latest

-e:設定環境變數。這裡指另外設定了LANG=C.UTF-8,即設定容器語言為C.UTF-8

# 連線mysql容器

啟動一個新的mysql容器,進入容器後,利用這個容器連線前面執行起來的容器。mysql連線的命令和正常的一樣,由於docker都和宿主機橋連,所以需要通過宿主機的ip和埠與另一個容器相連線。

$ sudo docker run -it --rm --net host mysql:5.7 "sh"
# mysql -h127.0.0.1 -P3308 -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> 

-------------------------------使用下面的命令同樣可以----------------------------
$ sudo docker run -it --rm --net host mysql:5.7 /bin/bash

關於docker容器通訊,可以看下面這張圖:
docker容器通訊

# 掛在資料捲到容器

mysql官方給出的掛載點主要包括:

Docker Description
/var/lib/mysql MySQL data dir
/var/log/mysql MySQL log dir
/var/sock/mysqld MySQL socket dir
/etc/mysql/conf.d MySQL configuration directory (used to overwrite MySQL config)
/etc/mysql/docker-default.d MySQL configuration directory (used to overwrite MySQL config)
$ docker run -p 3308:3306 --rm --name mysql -v $HOME/mysql/data:/var/lib/mysql -v $HOME/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

上面的命令將本地$HOME/mysql/data$HOME/mysql/log分別掛載到了容器的/var/lib/mysql/var/log/mysql位置。
通過掛載的方式,可以將容器的資料同步到本地,防止容器因為被清理而丟失所有資料;同樣,也可以通過掛載,將本地的一些資料載入到容器。總之,它實現了宿主機和容器之間的資料共享。

# 定製mysql映象

在使用了掛載之後,你會發現和容器共享的空間是沒有編輯許可權的,在unbantu上目錄和檔案的許可權為999

[email protected]:~/mysql$ ls -al
total 176204
drwxrwxr-x  7    999    999     4096 45 18:29 .
drwxr-xr-x 35 kangbb kangbb     4096 45 23:16 ..
-rw-r-----  1    999    999       56 44 23:37 auto.cnf
-rw-------  1    999    999     1675 44 23:37 ca-key.pem
-rw-r--r--  1    999    999     1107 44 23:37 ca.pem
-rw-r--r--  1    999    999     1107 44 23:37 client-cert.pem
-rw-------  1    999    999     1679 44 23:37 client-key.pem
-rw-r-----  1    999    999      398 45 18:29 ib_buffer_pool
-rw-r-----  1    999    999 79691776 45 18:29 ibdata1
-rw-r-----  1    999    999 50331648 45 18:29 ib_logfile0
-rw-r-----  1    999    999 50331648 44 23:37 ib_logfile1
drwxr-x---  2    999    999     4096 44 23:37 mysql
drwxr-x---  2    999    999     4096 44 23:37 performance_schema
-rw-------  1    999    999     1675 44 23:37 private_key.pem
-rw-r--r--  1    999    999      451 44 23:37 public_key.pem
-rw-r--r--  1    999    999     1107 44 23:37 server-cert.pem
-rw-------  1    999    999     1675 44 23:37 server-key.pem
drwxr-x---  2    999    999    12288 44 23:37 sys
drwxr-x---  2    999    999     4096 45 04:47 test
drwxr-x---  2    999    999     4096 45 05:26 item

所以,可以通過重新構建mysql映象,完成自己的一些配置。例如,我想要本地的mysql可以被遠端訪問,例如我需要開啟mysql的log-bin日誌功能,那麼可以通過修改my.cnf檔案實現。
my.cnf檔案一般位於/etc/mysql/目錄下。官方給出的文件顯示在/etc/目錄下面,所以可能會有些出入。通過進入容器,獲得檔案內容,進行修改。修改完成後如下:

!includedir /etc/mysql/conf.d/
[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
#log-error=/var/log/mysql/error.log
# By default we only accept connections from localhost
# 可註釋,這樣遠端機可以訪問
#bind-address    = 127.0.0.1
#開啟log-bin日誌
log-bin=/var/log/mysql/mysql-bin.index
# 伺服器唯一id,預設為1,一般取IP最後一段
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

完成後,構建如下目錄結構:

mysql
|_____my.cnf
|_____Dockerfile

其中,Dockerfile檔案如下:

FROM mysql:latest
EXPOSE 3306
ADD my.cnf /etc/mysql/
CMD ["mysqld"]

最後,執行命令:

$ docker build -t my_mysql:latest .

完成了mysql映象的定製。

$ docker pull dockerpracticecn/docker_practice:latest
$ docker run -it -p 8080:80 dockerpracticecn/docker_practice

相關推薦

地址映象和變換(一)之主存虛存

規則 根據 pan 命中率 實現 -s tro 分享 使用 地址映象:是將每一個虛存單元按某種規則裝入實存,即建立多用戶虛地址與實存地址之間的相應關系。 地址變換:是程序依照這樣的映象關系裝入實存後。在運行時,多用戶虛地址怎樣變換成相應的實存地址。 頁面爭用(實頁沖突

基於dockerMysql的shell備份腳本

database gzip tab xxx ret docker for dock day #!/bin/bash#For Backup Mysql#Date:XXXDOCKERNAME="dockernames"USER="xx"P

MAVEN阿里雲映象資源

<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/ne

docker pull下載映象報錯Get https://registry-1.docker.io/v2/library/centos/manifests/latest:..... timeout

  使用docker pull從映象倉庫拉取映象時報錯如下:[[email protected] ~]# docker pull centosUsing default tag: latestTrying to pull repository docker.io/library/cent

docker學習記錄——使用docker映象

基於windows10 docker官方映象網不好~ 一般申請一個阿里雲映象作為私人映象源:訪問 https://home.console.aliyun.com/ 登入,選擇 建立自己的映象倉庫。 登入阿里雲docker registry: > docker

pip/pip3更換國內映象

Windows下更換映象源 開啟使用者目錄 %Users/${username}/% , 如(C:/Users/使用者名稱/), 在此目錄下建立 pip 資料夾 在 pip 目錄下建立 pip.ini 檔案, 內容如下 [global] timeout =

3-3.7 上傳docker映象

上傳映象 使用docker push映象到倉庫,預設上傳到DockerHub官方倉庫,需要賬號密碼,命令格式: docker push [OPTIONS] NAME[:TAG] 例如上傳docker.io/busybox:latest 映象。 1 首先準備一個hub 的帳號

3-3.6 存出和載入docker映象

使用 docker save 和 docker load 命令存出和載入映象。 存出鏡像     將映象存出到本地檔案,使用docker save 。例如將busybox:latest映象存出為檔案bbox_latest.tar檔案

3-3.5 建立映象

建立映象的三種方式:基於已有映象的容器建立、基於本地模板匯入、基於Dockerfile建立。第三種基於Dockerfile建立映象的方式會在後續章節深入講解     1.使用commit 方式建立     思路:先獲取一個映象,進入容器中對容器進行修改

3-3.4 刪除映象

 rmi命令用於刪除映象。若不指定標籤,則刪除latest標籤 docker rmi  [選項] <註冊名稱>/<映象名稱,id>:<標籤> 選項: -f、--force=false 強制刪除映象--no-p

3-3.3 查詢映象

search命令用與在docker hub 中搜索映象  docker search <選項><搜尋詞> 選項: --automated=false 只顯示由docker hub 的automated build 建立的映象--n

3-3.2 檢視映象資訊

使用 docker images 命令列出本地主機已有的映象。比如: [[email protected] ~] docker images REPOSITORY TAG

第3章 映象--3.1 獲取映象

Docker 執行容器前需要本地存在對應的映象,如果映象不存在本地,Docker 會從映象倉庫下載(預設是 Docker Hub 公共註冊伺服器中的倉庫)。 本章將介紹更多關於映象的內容,包括: 從倉庫獲取映象; 管理本地主機上的映象; 介紹映象實現的基本原理。 獲取映

docker-4 選擇docker合適的映象

看了3-1文章的同學估計已經知道,我們需要選擇的是alpine作為映象的實際執行的容器 一般我們會去 https://hub.docker.com/ 找到自己的映象 比如我搜索java     這個就是最小的,也是符合我們

轉 Docker 從零開始製作基礎映象[centos]

轉自 https://blog.csdn.net/bolg_hero/article/details/50263569 http://www.oschina.net/news/62897/docker-hub-contains-high-risk-vulnerabilities 這裡有個統計,do

Archlinuxarm / AUR的國內映象源(for Banana Pi / Raspberry Pi , etc)(更新)

以前一直沒有找到國內Archlinux arm的映象源,http://mirror.bit.edu.cn/只有Arch,沒有Arch for arm,所以一直用的是官網那幾個源,導致速度特別特別慢,一般20-30k/s,運氣不好還會2k/s左右。。。 剛才準備在Banana Pi上安

windows下建立映象虛擬磁碟

       關於虛擬磁碟這種技術的應用,在平時的開發過程當中並不會很常見,主要是因為現在的磁碟較大,分割槽較多,加上現在的IDE功能較為強大。所以運用虛擬磁碟的地方並不多。但是,在很多需要通過指令碼來進行程式編譯、連結的地方,由於指定固定路徑會導致無法在其他

docker推送自己的映象到docker hub

環境: CentOS Linux release 7.4.1708 (Core) Linux核心:3.10.0-693.el7.x86_64 Docker: Client: 18.06.1-ce Server: 18.06.1-ce 構建自己的映象 # 建立一個

牛逼吹上天,結果下個Eclipse都要靠國內映象

下個Eclipse都要靠國內映象站,我都不想評價什麼網路強國什麼口號了。 Eclipse For Java EE 版本下載地址:http://iso.mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/releas

Docker第五篇-Docker映象推送公共倉庫

文章目錄 映象推送步驟 總結 這裡介紹本地映象如何推送到docker官方倉庫。 映象推送步驟 註冊倉庫 登入docker官網倉庫(https://hub.docker.com),註冊一個賬號,記住賬號和密碼 首先,本地要有一個映象,映象