一、Docker理解與安裝
1.1 Docker概述與其原理
目前,docker的研發者們維護了相關的三個網站:
??三個網站分別介紹docker的構成、安裝、使用、文檔和倉庫
Docker官網://www.docker.com/
Docker文檔://docs.docker.com/
Docker倉庫://hub.docker.com/
Docker總的有以下幾個部分:
Docker_Client是Docker安裝在本地的客戶端,可以通過docker build、docker pull、docker run等指令構建/拉取/運行程序。
Docker_Host是Docker安裝在本地的主機,它通過拉取Registry倉庫中的程序文件,在本地構成鏡像。
Registry是倉庫,倉庫(Repository)是集中存放鏡像文件的場所。
倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub(//hub.docker.com/),存放了數量龐大的鏡像供用戶下載;國內的公開倉庫包括阿里云 、網易云等。
可以在這些倉庫上注冊自己的賬號、上傳程序,之后將這些程序拉取到docker中運行。
Docker 鏡像(Image)就是一個只讀的模板,鏡像可以用來創建Docker容器,一個鏡像可以創建很多容器; 就好似 Java 中的類和對象,類就是鏡像,容器就是對象。
Docker 利用容器(Container)獨立運行的一個或一組應用,容器是用鏡像創建的運行實例。
它可以被啟動、開始、停止、刪除;每個容器都是相互隔離的,保證安全的平臺。
可以把容器看做是一個簡易版的Linux環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。
??總結:
Docker 本身是一個
容器運行載體或稱之為管理引擎,我們把應用程序和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就似乎 image鏡像文件;只有通過這個鏡像文件才能生成 Docker 容器;image 文件可以看作是容器的模板;Docker 根據 image 文件生成容器的實例;同一個 image 文件,可以生成多個同時運行的容器實例。image 文件生成的容器實例,本身也是一個文件,稱為鏡像文件。
一個容器運行一種服務,當我們需要的時候,就可以通過
docker客戶端創建一個對應的運行實例,也就是我們的容器。至于倉庫,就是放了一堆鏡像的地方,我們可以把鏡像發布到倉庫中,需要的時候從倉庫中拉下來就可以了。
1.2 Docker的安裝
1.2.1 安裝前環境檢查
首先判斷測試機器上是否已經安裝Docker,如果要重新安裝,要保證刪除干凈才能安裝。
如果有舊版本,需要:
卸載舊版本
?
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
再檢查linux版本信息(centos環境):
-
安裝docker,linux版本要在7以上,系統內核版本要在3.10以上。
-
centos7.0和centos8.0docker的操作,支持的庫是不同的。
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$ uname -r
3.10.0-957.27.2.el7.x86_64
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="//www.centos.org/"
BUG_REPORT_URL="//bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$
linux版本信息
1.2.2 安裝相關軟件包及依賴
yum安裝gcc相關環境(需要確保 虛擬機可以上外網 )
yum -y install gcc
yum -y install gcc-c++
gcc相關環境安裝完成后,可以通過gcc -v查看
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=//bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
安裝需要的軟件包
yum install -y yum-utils
以上就安裝完了docker所需要的相關軟件包
接下來使用yum安裝docker,因為yum剛開始默認使用國外的鏡像倉庫,這里推薦改成國內的。
??添加阿里云的環境:
yum-config-manager --add-repo //mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo??更新yum軟件包索引:
yum makecache fast
然后使用yum安裝docker
yum -y install docker
使用docker -v查看docker版本和安裝結果。
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$ docker -v
Docker version 1.13.1, build 7d71120/1.13.1
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$
至此,docker的安裝完成,總的來說就是在已滿足的環境下使用yum install -y docker去安裝。
可以使用docker -h去查看docker相關的命令。
?? 為了更加方便的使用docker,需要將其加入開機啟動中。
啟動前應當設置源
vim /usr/lib/systemd/system/docker.service使用:
systemctl enable docker
systemctl start docker啟動docker服務。
注意:測試機器上可能有其他人的docker服務,停止之前最好先查看
1.2.3docker初始化及登錄使用
docker的倉庫中有很多的源,可以拉取其中的鏡像到本地。
例如需要在本地運行centos7:docker pull centos:centos7
拉取了這個鏡像之后需要初始化/啟動容器。
docker run --net bridge --privileged -itd --cpus=4 centos:centos7 /usr/sbin/init
參數很重要:/usr/sbin/init是docker啟動的自己的目錄,不能更改。
但是docker運行輸出的相關數據可以和物理機形成一個映射。通過-v參數設置
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$ sudo docker run -v /flash/xxx/data/test-mysql/:/data/ --net bridge --privileged -itd --cpus=4 centos:centos7 /usr/sbin/init
xxx0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-v 物理機路徑:docker路徑,這樣docker中的路徑下的數據目錄就會同步到物理機的路徑中。
之后輸出的一串字符xxx0xxxxxxxxxxxxxxxxx就是docker的鏡像的標號。就像物理機上evm-c8e31fv9upsvqdh319c0這一串一樣。
通過這個字符串去登錄特定的docker中的運行的鏡像。
登錄:
docker exec -it [id] /bin/bas
id就是這個字符串,不用輸全,docker會自動匹配到。
[@evm-c8e31fv9upsvqdh319c0 test-mysql]$ sudo docker exec -it bf3 /bin/bash
[root@xxxcde42f91f /]# ls
anaconda-post.log data etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
[root@xxxcde42f91f /]#
其中,xxx[id]就代表root@xxxcde42f91f的編號。
之后就登錄上了docker中的centos7的環境。
退出docker使用centos7命令用exit,不要簡單的ctrl + z
遇到container不正常時,可以重啟它,注意不要隨便重啟docker服務,
docker contianer restart
二、運行MySQL程序
2.1 編譯mysql環境準備
安裝相關依賴:
sudo yum install -y epel-release
sudo yum install -y wget bzip2 automake autoconf libtool make bison libaio \
libaio-devel git openssl openssl-devel curl-devel lrzsz libffi-devel \
ncurses-devel zip unzip perl-JSON perl-Digest-MD5 \
&& $SUDO yum clean all
這些依賴是5.7版本用的比較多,如果不裝這些依賴,會在編譯過程中提示各種問題。
cmake安裝,對于5.7來說,yum默認的低版本就可以滿足要求,但是8.0版本的mysql的編譯需要cmake3.0以上才能支持。
相對于傳統的去官網下載安裝包后解壓編譯安裝,更加推薦wget國內源,解決網絡連接問題后,再解壓編譯安裝。
較為快一點版本:
wget //cmake.org/files/v3.23/cmake-3.23.0-rc2.tar.gz
當然也可以去github官方下載:
wget //github.com/Kitware/CMake/releases/download/v3.23.3/cmake-3.23.3.tar.gz
因為docker中的環境和物理機器上的目錄構成了映射,所以可以直接在物理機上下載。之后在docker中的centos7上就有相關的文件。
以cmake-3.23.0-rc2版本為例
#解壓
tar -zxvf cmake-3.23.0-rc2.tar.gz
cd cmake-3.23.0-rc2
./bootstrap --prefix=/usr/local
#編譯安裝
make && make install
#配置path
vi ~/.bash_profile
PATH=/usr/local/bin:$PATH:$HOME/bin
安裝高版本的cmake時,./boostrap --prefix=/usr/lcoal需要高版本的GCC支持,所以需要先安裝高板的的gcc。
yum install -y //mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
yum install -y //mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm
yum install devtoolset-11-gcc-c++
source /opt/rh/devtoolset-11/enable
安裝完成之后查看gcc 版本
[root@aa0cde42f91f data]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-11/root/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-11/root/usr --mandir=/opt/rh/devtoolset-11/root/usr/share/man --infodir=/opt/rh/devtoolset-11/root/usr/share/info --with-bugurl=//bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-11.2.1-20220127/obj-x86_64-redhat-linux/isl-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.1 20220127 (Red Hat 11.2.1-9) (GCC)
[root@aa0cde42f91f data]#
然后再編譯cmake。
編譯安裝cmake完畢,再配置path之后就可以使用了。
[root@aa0cde42f91f cmake-3.23.0-rc2]# cmake -version
cmake version 3.23.0-rc2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
[root@aa0cde42f91f cmake-3.23.0-rc2]#
??到此,安裝mysql需要的工具包,cmake、gcc都準備好了。
工具包是最開始安裝的,主要是解決5.7版本各種庫缺失的問題。
cmake工具是mysql高版本要求,必須要cmake3.0以上。
gcc也是mysql高版本的要求,不同的小版本不一樣,但是gcc11.0以上完全可以滿足要求。
2.2 注意弱密碼問題
首先,mtr測試的時候是可能產生弱密碼的,例如有些用戶權限,如果并沒有創建用戶直接賦權,那么mysql將自動為這個用戶創建一個空的密碼。
其次,mysql編譯安裝的時候是不能有弱密碼的,不能用 --insecuret的方式去初始化,必須有秘密,之后也必須改密碼。
2.3 編譯安裝mysql
在自己的物理機器上傳需要編譯安裝的版本,之后在容器中看到一樣的數據,然后進行編譯安裝。
以5.7版本為例,在物理機器上傳需要安裝的源代碼。下載源碼解壓后,cmake命令
cmake . -DCMAKE_INSTALL_PREFIX=../mysqlexec -DMYSQL_DATADIR=../mysqldata -DWITH_BOOST=./boost -DSYSCONFDIR=./etc -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_EMBEDDED_SERVER=1 -DWITH_DEBUG=1
之后編譯安裝:
make -j 5&& make install
如果沒有配置文件就創建配置文件:
配置文件my.cnf內容:
[mysqld]
user = root
port=9888
socket=/data/mysqldata/mysql_9888.sock
datadir=/data/mysqldata
log_error=/data/mysqldata/logs/error.log
basedir=/data/mysqlexec/
server-id=131 #here use ip tail
初始化mysql(必須有密碼):
./mysqld --initialize --user=root --basedir=/flash/xxx/data/teledb8.0/mysqlexec/ --datadir=/flash/xxx/data/teledb8.0/mysqldata/
按配置文件啟動:
./mysqld_safe --defaults-file=/data/mysqlexec/etc/my.cnf &
啟動后修改密碼:
ALTER USER USER() IDENTIFIED BY '新密碼'
修改密碼后重新登錄就可以了:
[root@aa0cde42f91f bin]# ./mysql --socket=/data/mysqldata/mysql.sock -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.7.46-log MySQL Community Server (GPL)
?
Copyright (c) 2000, 2020, 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>
?
至此,在docker中安裝運行mysql完畢。