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容器通訊,可以看下面這張圖:
# 掛在資料捲到容器
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 4月 5 18:29 .
drwxr-xr-x 35 kangbb kangbb 4096 4月 5 23:16 ..
-rw-r----- 1 999 999 56 4月 4 23:37 auto.cnf
-rw------- 1 999 999 1675 4月 4 23:37 ca-key.pem
-rw-r--r-- 1 999 999 1107 4月 4 23:37 ca.pem
-rw-r--r-- 1 999 999 1107 4月 4 23:37 client-cert.pem
-rw------- 1 999 999 1679 4月 4 23:37 client-key.pem
-rw-r----- 1 999 999 398 4月 5 18:29 ib_buffer_pool
-rw-r----- 1 999 999 79691776 4月 5 18:29 ibdata1
-rw-r----- 1 999 999 50331648 4月 5 18:29 ib_logfile0
-rw-r----- 1 999 999 50331648 4月 4 23:37 ib_logfile1
drwxr-x--- 2 999 999 4096 4月 4 23:37 mysql
drwxr-x--- 2 999 999 4096 4月 4 23:37 performance_schema
-rw------- 1 999 999 1675 4月 4 23:37 private_key.pem
-rw-r--r-- 1 999 999 451 4月 4 23:37 public_key.pem
-rw-r--r-- 1 999 999 1107 4月 4 23:37 server-cert.pem
-rw------- 1 999 999 1675 4月 4 23:37 server-key.pem
drwxr-x--- 2 999 999 12288 4月 4 23:37 sys
drwxr-x--- 2 999 999 4096 4月 5 04:47 test
drwxr-x--- 2 999 999 4096 4月 5 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),註冊一個賬號,記住賬號和密碼 首先,本地要有一個映象,映象