docker上安裝使用mysql鏡像
背景:
現(xiàn)如今不管什么服務(wù)和應(yīng)用基本都可以在docker里跑一跑了,但是在我個(gè)人的印象中,像數(shù)據(jù)庫這種比較重要大型且數(shù)據(jù)容易受傷的應(yīng)用是不適合在docker里跑的。但是也有很多人嘗試在docker中跑mysql等數(shù)據(jù)庫,所以也試著嘗試一下。(好吧,重點(diǎn)是領(lǐng)導(dǎo)喜歡~~)
獲取鏡像:
mysql的鏡像可以自己用dockerfile制作一個(gè),或者直接到官方的docker鏡像庫中下載,本文用的是官方鏡像。
# docker pull mysql # docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/mysql latest d9124e6c552f 12 days ago 383.4 MB
運(yùn)行容器:
1:正常運(yùn)行。
啟動(dòng)容器:
# docker run --name cmh-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d docker.io/mysql
進(jìn)入容器:
# docker-enter cmh-mysql
進(jìn)入mysql:
root@3a2b8ab0d971:~# mysql -u root -pmy-secret-pw 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 2 Server version: 5.7.16 MySQL Community Server (GPL) Copyright (c) 2000, 2016,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>
以上就創(chuàng)建了一個(gè)mysql的docker容器,可以看到版本為5.7.16。但是這樣創(chuàng)建的容器有兩個(gè)問題,一是容器刪除后,數(shù)據(jù)就丟失了,二是要訪問數(shù)據(jù)庫,必須進(jìn)入到容器里面才可以。
2:持久化數(shù)據(jù),映射開放mysql端口
創(chuàng)建宿主機(jī)數(shù)據(jù)存放目錄:
# mkdir -p /opt/data/mysql
啟動(dòng)容器:
# docker run --name cmh-mysql -v /opt/data/mysql/:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d docker.io/mysql
c38f50a540ff4d5ecf1a5ec49fb721335a8e1b79dec58229cf5e00553f988e44
查看容器:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c38f50a540ff docker.io/mysql "docker-entrypoint.sh" 9 seconds ago Up 8 seconds 0.0.0.0:3306->3306/tcp cmh-mysql
查看端口:
# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3306 :::* LISTEN 28657/docker-proxy
查看宿主機(jī)上的mysql數(shù)據(jù):
# cd /opt/data/mysql # ll total 188452 -rw-r-----. 1 systemd-bus-proxy ssh_keys 56 Dec 6 16:01 auto.cnf -rw-r-----. 1 systemd-bus-proxy ssh_keys 1325 Dec 6 16:01 ib_buffer_pool -rw-r-----. 1 systemd-bus-proxy ssh_keys 79691776 Dec 6 17:16 ibdata1 -rw-r-----. 1 systemd-bus-proxy ssh_keys 50331648 Dec 6 17:16 ib_logfile0 -rw-r-----. 1 systemd-bus-proxy ssh_keys 50331648 Dec 6 16:01 ib_logfile1 -rw-r-----. 1 systemd-bus-proxy ssh_keys 12582912 Dec 6 17:16 ibtmp1 drwxr-x---. 2 systemd-bus-proxy ssh_keys 4096 Dec 6 16:01 mysql drwxr-x---. 2 systemd-bus-proxy ssh_keys 8192 Dec 6 16:01 performance_schema drwxr-x---. 2 systemd-bus-proxy ssh_keys 8192 Dec 6 16:01 sys
-p 3306:3306把容器的mysql端口3306映射到宿主機(jī)的3306端口,這樣想訪問mysql就可以直接訪問宿主機(jī)的3306端口。
-v /opt/data/mysql:/var/lib/mysql,即把宿主機(jī)/opt/data/mysql/目錄映射到容器的/var/lib/mysql目錄。
注意事項(xiàng):
1:在使用-v選項(xiàng)映射目錄時(shí),宿主機(jī)需關(guān)閉SElinux:
# setenforce 0
或者給數(shù)據(jù)目錄添加相關(guān)selinux權(quán)限:
# chcon -Rt svirt_sandbox_file_t /my/own/datadir
2:-v 選項(xiàng)原本是把宿主機(jī)的目錄映射進(jìn)容器,但是在本文中,是反過來的。即是把容器中的目錄映射出宿主機(jī),這是因?yàn)楣俜界R像在制作的時(shí)候使用了VOLUME /var/lib/mysql選項(xiàng)。這使得容器中/var/lib/mysql成為一個(gè)單獨(dú)的卷組,在使用掛載選項(xiàng)-v時(shí),就可以把該目錄映射出宿主機(jī)。
可以參考官方mysql鏡像的dockerfile:
https://github.com/docker-library/mysql/blob/4dd33136c4739667a223d39b6f829beb27b235cf/5.7/Dockerfile
DOCKER介紹 點(diǎn)擊查看
Docker從入門到實(shí)踐 點(diǎn)擊查看
相關(guān)文章
詳解利用ELK搭建Docker容器化應(yīng)用日志中心
這篇文章主要介紹了詳解利用ELK搭建Docker容器化應(yīng)用日志中心,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04docker 部署 Elasticsearch kibana及ik分詞器詳解
這篇文章主要介紹了docker 部署 Elasticsearch kibana及ik分詞器詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程
這篇文章主要為大家介紹了docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11以示例講解Clickhouse Docker集群部署以及配置
這篇文章主要介紹了Clickhouse Docker集群部署及配置,示例講解的非常詳細(xì),希望可以幫助到有需要的小伙伴2021-08-08手動(dòng)構(gòu)建自己的docker容器鏡像實(shí)戰(zhàn)
這篇文章主要介紹了如何手動(dòng)構(gòu)建自己的鏡像并上傳到鏡像倉庫中,文中有詳細(xì)的代碼實(shí)例,需要的朋友可以參考閱讀2023-04-04docker容器狀態(tài)轉(zhuǎn)換管理命令實(shí)例詳解
Docker容器只是一個(gè)運(yùn)行于宿主操作系統(tǒng)host?OS上的應(yīng)用進(jìn)程,所以你需要一個(gè)鏡像來運(yùn)行它,Docker鏡像以進(jìn)程的方式運(yùn)行時(shí)就叫做Docker容器,這篇文章主要給大家介紹了關(guān)于docker容器狀態(tài)轉(zhuǎn)換管理命令的相關(guān)資料,需要的朋友可以參考下2022-05-05