Docker系列之實戰:3.安裝MariaDB

環境

[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

[root@centos181001 ~]# docker -v
Docker version 18.09.1, build 4c52b90

第一步:搜索和拉取官方MariaDB鏡像

https://hub.docker.com/_/mariadbpython

基於ubuntu:trustymysql

### 搜索鏡像
docker search mariadb

### 拉取最新鏡像
docker pull mariadb

### 拉取指定版本鏡像
docker pull mariadb:5.5.63-trusty

### 查看拉取的鏡像
docker image ls
docker image ls mariadb

第二步:使用Image

1.啓動MariaDB

docker run --rm --name some-mariadb -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb:5.5.63-trusty

    MYSQL_ROOT_PASSWORD=my-secret-pw    指定MariaDB數據庫的root密碼


    #### 進入容器並操做數據庫
    docker exec -it some-mariadb bash
    mysql -uroot -pxiaoliu
    show databases;

2.啓動MariaDB並放開3306端口,以容許外部鏈接

docker run --rm --name some-mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb:5.5.63-trusty

    #### 1.宿主機安裝MariaDB客戶端鏈接容器內數據庫實例
    yum install -y mariadbnetst
    mysql -h127.0.0.1 -uroot -pxiaoliu

    #### 2.宿主機安裝mycli並鏈接mariadb
    #### Mycli是一個基於Python開發的MySQL命令行客戶端工具,具備自動完成和語法突出顯示功能。
    yum install -y epel-release 
    yum install -y python-pip python-devel
    pip install mycli

    mycli -h localhost -u root -p xiaoliu
    mycli -h 127.0.0.1 -u root -p xiaoliu
    mycli -h 11.11.11.61 -u root -p xiaoliu

    #### 3.也能夠在外部,使用 Navicat 工具鏈接數據庫,IP地址使用宿主機的IP地址

3.使用自定義my.cnf

配置文件路徑:linux

/etc/mysql/my.cnfgit

/etc/mysql/conf.d/*.cnfgithub

#### 1.首先運行一個臨時容器
docker run --rm --name tmp-mariadb -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb:5.5.63-trusty

#### 2.從運行的容器裏將配置文件copy到本地
docker cp tmp-mariadb:/etc/mysql/my.cnf /home/mariadb/

#### 3.刪除這個臨時容器
docker rm -f tmp-mariadb

#### 4.編輯配置文件後使用Dockerfile從新創建新鏡像便可。
$ docker run --name some-mariadb -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag

4.沒有cnf文件的配置

#### 許多選項能夠經過參數傳遞給服務器,而能夠不自定義my.cnf
#### 好比要更改全部表的默認編碼和排序規則,可使用如下命令啓動容器
docker run --name some-mariadb 
            -e MYSQL_ROOT_PASSWORD=my-secret-pw 
            -d mariadb:5.5.63-trusty 
            --character-set-server=utf8mb4 
            --collation-server=utf8mb4_unicode_ci


    #### 查看支持選項完整列表
    docker run -it --rm mariadb:5.5.63-trusty --verbose --help

5.使用docker stack deploy or docker-compose

#### 1.安裝docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" 
     -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

#### 2.建立stack.yml文件
cat <<EOF >stack.yml
# Use root/example as user/password credentials
version: '3.1'

services 大專欄  Docker系列之實戰:3.安裝MariaDB:

  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
EOF

#### 3.執行如下任意命令
docker stack deploy -c stack.yml mariadb
docker-compose -f stack.yml up

#### 4.等待他徹底初始化並打開瀏覽器測試
http://11.11.11.61:8080

6.經過Docker查看日誌

docker logs some-mariadb

7.支持的變量

啓動mariadb映像時,能夠經過在docker run命令行上傳遞一個或多個環境變量來調整MariaDB實例的配置。請注意,若是使用已包含數據庫的數據目錄啓動容器,則如下任何變量都不會產生任何影響:任何預先存在的數據庫在容器啓動時始終保持不變。sql

MYSQL_ROOT_PASSWORD 必需,用來指定MariaDB ``root``密碼
MYSQL_DATABASE      可選,容許您指定要在映像啓動時建立的數據庫的名稱。
                    若是提供了用戶/密碼(見下文),則該用戶將被授予對該數據庫的超級用戶訪問權限(對應於GRANT ALL)。
MYSQL_USER, MYSQL_PASSWORD  可選,能夠結合使用來建立新用戶並設置該用戶的密碼。
                            此用戶將被授予MYSQL_DATABASE變量指定的數據庫的超級用戶權限(參見上文)。
                            這兩個變量都是建立用戶所必需的。

MYSQL_ALLOW_EMPTY_PASSWORD  可選,設置爲yes容許以root用戶的空密碼啓動容器。
MYSQL_RANDOM_ROOT_PASSWORD  可選,設置yes爲爲root用戶生成隨機初始密碼(使用pwgen)。
                            生成的root密碼將打印到stdout(GENERATED ROOT PASSWORD: .....)。

8.Docker的祕密

做爲經過環境變量傳遞敏感信息的替代方法,_FILE能夠將其附加到先前列出的環境變量,從而使初始化腳本從容器中存在的文件加載這些變量的值。docker

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mariadb:tag

    支持如下選項:
    MYSQL_ROOT_PASSWORD
    MYSQL_ROOT_HOST
    MYSQL_DATABASE
    MYSQL_USER
    MYSQL_PASSWORD.

9.數據持久化

#### 1.在主機系統(容器外部)上建立一個數據目錄,並將其掛載到容器內可見的目錄中。
mkdir /home/data

#### 2.啓動容器
docker run --name some-mariadb -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb

#### 3.建立測試數據
create database test;
use test; 
create table linux(username varchar(15) not null,password varchar(15) not null);
insert into linux values ('XiaoMing', 'xiaoliu');
insert into linux values ('XiaoHong', '12346'), ('HongHong', '12346');
commit;

#### 4.中止容器後再啓動容器或者刪除容器後再使用如下命令啓動一個新的容器,以前的數據都會存在。
docker run --name some-mariadb -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb

10.備份數據庫

docker exec some-mariadb sh 
            -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' 
            > /some/path/on/your/host/all-databases.sql

像下邊這樣啓動另外有一個容器,以即可以讓另外的容器能夠鏈接到MySQL容器(未完)

docker run --name some-app --link some-mariadb:mysql -d application-that-uses-mysql

測試:
docker pull centos
docker run --rm -it --link some-mariadb:mysql centos bash
yum install -y mariadb
相關文章
相關標籤/搜索