要求系統爲centos7以上,64位,內核版本高於3.10。
// 安裝相關係統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
// 添加yum源
sudo yum-config-magger --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
// 更新yum緩存
sudo yum makecache fast
// 安裝
sudo yum -y install docker-ce
// 啓動
sudo systemctl start docker 或 sudo service docker start
// 設置爲開機自啓
sudo systemctl enable docker
輸入 docker search --filter "is-official=true" nginx 能夠搜索到一條nginx的鏡像資源代表docker啓動成功。
拉取鏡像:
// 拉取鏡像前設置docker的yum源
cd /etc/docker
vi daemon.json // 1.9版沒有該文件 通過vi自動創建
// 寫入該配置
// xxx是獲取的阿里雲加速密鑰
// 獲取密鑰及配置詳情訪問 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 點擊菜單中鏡像加速器選項
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
// 然後重啓docker
sudo systemctl daemon-reload
sudo systemctl restart docker
// 拉取Mysql
docker pull mysql:8.0.11
// 查看本地鏡像
docker images
// 創建Mysql容器
docker run -d -v /opt/mysql_data_docker/data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /opt/mysql_data_docker/data/mysql/data:/var/lib/mysql -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.11
/*
*參數解釋
*-d 啓動方式 -d: 後臺運行容器,並返回容器ID; -t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;-i: 以交互模式運行容器,通常與 -t 同時使用;
*-v 文件掛載 將容器的配置文件與data目錄(含數據與日誌)與宿主機文件相關聯 容器出現後只需創建新容器並掛載相同目錄,就能一如既往的提供服務
*-p 端口映射 將對宿主機端口3306(前)的訪問redirect到對容器的3306(後)的訪問
*--name 容器名 可寫爲--name=container_name 其他參數也可以
*-e創建時傳遞的參數 這裏用於初始化root用戶
*mysql:8.0.11 使用具體的鏡像名
*ps:--link參數 容器互聯 關聯指定的目標容器 可以讀取目標容器的環境變量 用於對目標容器進行訪問 例如很多服務都需要對mysql容器進行訪問,在配置文件中如果將MySQL的ip地址寫死會限制容器的靈活性,就可以將這個服務與mysql容器關聯起來 在配置文件的mysql的ip中寫mysql的容器名就行的(我這裏就寫mysql8:3306)
*/
// 查看運行中的容器
docker ps //docker ps -a 產看所有容器
// 創建鏡像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
/*
*OPTIONS說明:
*-a :提交的鏡像作者;
*-c :使用Dockerfile指令來創建鏡像;
*-m :提交時的說明文字;
*-p :在commit時,將容器暫停。
*例 docker commit -a "test.com" -m "my MySQL" ,mysql8 mymysql:v1
*ps:查看docker inspect container_name命令中的mounts屬性包含該容器的掛載信息 創建的鏡像在本地
*/
/*
*既然有pull、commit那就少不了push
*先在docker hub官網https://hub.docker.com/註冊
*然後使用docker login登錄 登錄成功後登錄信息爲儲存在本地 不需要重複登錄 和git操作類似
*然後通過docker push將指定的鏡像上傳到docker hub
*在生產環境中 也可以通過docker export將容器(帶數據)導出爲zip、tar寫到存儲介質然後在想要的機器上用docker import導入容器
*/
操作容器
// 進入容器 我這裏進入mysql8
dokcer exec -it container_name /bin/bash
// 連接mysql
mysql -uroot -p
password:xxxxxx
// mysql 8以上用戶密碼加密方式、sql模式與5.7及以下有不同 可能導致低版本的Navicat連接不上mysql、帶group by的sql語句執行報錯
// 修改加密方式
// 本機登錄
alter user 'root'@'localhost' identified with mysql_native_password by 'xxxx';
// 非本機登錄
alter user 'root'@'%' identified with mysql_native_password by 'xxxx';
// 更新權限信息
flush privileges;
// 修改sql_model
show variables like 'sql_mode'; 或 select @@sql_mode;
// 複製其中sqlmodel值 去掉其中的only_full_group_by 更新該屬性 例如我的
set @@sql_mode = `STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION`;// 該語句修改全局配置 之後建的庫都生效
set sql_mode = `STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION`;// 之前建的庫需要在該庫下執行該語句才生效
遇到的問題:
1.開始docker可以search一pull就出錯,按網上的修改網卡配置文件ifcfg-xxx:將dhcp關了 設置靜態ip應該是我的值沒設對導致search都出錯,然後該文件還原,網上有的說刪除/etc/udev/rules.d/70-persistent-net.rules配置文件 重啓機器讓它自動選擇網卡,我沒發現這個文件 自己加了寫入
SUBSYSTRM=="net",ACTION=="add",DRIVERS=="?*",ATTR{address}=="00:0c:29:dc:dd:ad",ATTR{type}=="1",KERNEL=="eth*",NAME=="你的網卡配置文件名(去除掉‘ifcfg-’的字符串"
然後重啓機器問題就解決了
進入ifcfg-xxx cd /etc/sysconfig/network-scripts,應該就第一個 有一個ifcfg-lo不是的
2.開始設置了centos的yum源 沒設置docker的yum源 導致pull賊慢
3.docker端口映射或啓動容器時報錯Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen
重啓機器就可以了