Docker入門與實戰——《Docker ABC》電子書 https://github.com/gudaoxuri/Docker_ABCmysql
本節咱們以運行
MySQL
實例爲例,介紹基礎使用。git
使用 docker --help 查看支持的全部命令 |
首先咱們從hub.docker.com
上獲取MySQL
鏡像github
這裏有兩種方式,一是使用 search
命令:sql
root@ubuntu:~# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relati... 1253 [OK] mariadb MariaDB is a community-developed fork of M... 280 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Crea... 58 [OK] centurylink/mysql Image containing mysql. Optimized to be li... 29 [OK] ...
另外咱們也能夠在網頁上查詢更詳細的說明:docker
STARS 表示收藏的數量,PULLS 表示下載的數量,OFFICIAL 表示是官方鏡像(此處表示是不是MySQL官方發佈) |
咱們下載第一個官方的鏡像數據庫
root@ubuntu:~# docker pull mysql Pulling repository mysql 196db1908492: Download complete 575489a51992: Download complete ... Status: Downloaded newer image for mysql:latest
Docker鏡像的命名格式 <用戶名,官方鏡像不須要/>鏡像名稱</版本號> |
查看本機的全部鏡像ubuntu
root@ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql 5.7 196db1908492 6 days ago 359.8 MB mysql 5.7.9 196db1908492 6 days ago 359.8 MB mysql latest 196db1908492 6 days ago 359.8 MB ...
運行MySQL
鏡像app
root@ubuntu:~# docker run --name app1-db -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 2dee953f85d697ffcb78ac795f06e1a22731ae373b154178ea6220ce9b9c6e04
--name 指定容器名稱,-e 指定特殊的一些變量,-d 表示後臺運行(服務化) |
查看本機的全部在運行容器tcp
root@ubuntu:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2dee953f85d6 mysql:5 "/entrypoint.sh mysq 6 seconds ago Up 5 seconds 3306/tcp app1-db
docker ps -a 能夠查看全部容器(包含沒有運行的) |
而後呢,怎麼鏈接?咱們須要一個IP和端口,但上面的運行並無對外暴露端口,因此咱們要從新運行一個容器ide
Docker目前(v1.7)還不支持爲容器綁定端口,若有此需求請查看如何爲運行中的容器增長訪問端口 |
咱們先刪除剛纔的容器
root@ubuntu:~# docker rm -f app1-db app1-db
-f 表示強制刪除運行中的容器 |
這會刪除容器中的全部數據。不科學呀?那我想刪除容器時保留某些數據(如這裏的數據庫文件)怎麼辦?咱們往下看: |
從新運行MySQL
鏡像
root@ubuntu:~# docker run --name app1-db -e MYSQL_ROOT_PASSWORD=123456 -d -p 3308:3306 -v /opt/mysql_data:/var/lib/mysql mysql:5.7 1add96f289a1b8744500a4a6709af6e2e0628b97797e8470be75efe67e2005f4
-p 表示將外部訪問的3308端口映射到容器的3306端口,因爲MySQL 鏡像默認容許對外開放3306端口(我爲何知道?看它的dockerfile ,後面會有說明),因此也能夠直接用-P ,這樣的話外部訪問3306也被映射到容器的3306端口上 |
-v 參數能夠宿主機的目錄映射到將容器內目錄,上例-v /opt/mysql_data:/var/lib/mysql 會將宿主機/opt/mysql_data 映射到容器/var/lib/mysql (已知此目錄爲MySQL的數據目錄),這樣能夠保證容器刪除時對應目錄的數據不被刪除(由於這個目錄是宿主機上的),這點很重要,實際使用中幾乎全部容器都要作此映射! |
有了端口以後那IP呢?IP實際上就是你docker宿主機的IP
Docker的訪問機制簡單說明:Docker全部的對外服務統一使用宿主機IP+特定端口 ,當一個請求發起時會經由宿主面的iptables根據容器建立時的端口規則轉發到對應的容器處理。 |
好了,如今咱們作個鏈接測試,經過
固然咱們也能夠對容器作中止/運行/重啓
操做:
root@ubuntu:~# docker stop app1-db app1-db root@ubuntu:~# docker start app1-db app1-db root@ubuntu:~# docker restart app1-db app1-db
MySQL
容器如何升級/數據如何備份都方式均可以在 https://hub.docker.com/_/mysql/
獲取到指導。
至此,咱們基礎使用就介紹完了!