centos上學習docker

要求系統爲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

重啓機器就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章