Docker學習筆記 - 第四篇:映象倉庫
最近疫情鬧的,在家溫習之前在私塾線上買的cc老師的課程Docker,為了加深印象及鞭策一下自己換高薪工作,堅持做系列筆記,記錄自己成長的點點滴滴。不過看到訊息cc老師最新一期的高階架構師課程也要推出了,裡面包含了現在主流的架構,以及最新的技術,據說從理論到運用全部帶著做,像現在面試常用的 Netty, Redis, Kafka,Zookeeper, Dubbo, Nginx + openResty + kong + Lua, ElasticSearch等技術都深入原始碼層級
1 Docker倉庫
1.1 簡介
官方Docker Hub地址:
1.2 搭建私有倉庫
1:下載映象:docker pull registry
2:啟動Docker Registry容器
docker run -d -p 5000:5000 -v /ccuse/myregistry/:/tmp/registry --privileged=true registry
3:檢視Docker Registry程式:docker ps
1.3 私有倉庫基本操作
1:檢視Registry倉庫中現有的映象
curl -XGET http://192.168.1.111:5000/v2/_catalog
2:將Docker映象推到Registry中
-
給本地映象打Tag
docker tag cctomcat9 192.168.1.111:5000/cctomcat9test
-
推送映象到Registry中
docker push 192.168.1.111:5000/cctomcat9test
會出現錯誤,因為client與Registry互動預設將採用https訪問,但我們在安裝Registry時並未配置指定相關的key和crt檔案,https將無法訪問
-
在/etc/sysconfig/docker中做配置:
ADD_REGISTRY='--add-registry 192.168.1.111:5000’ INSECURE_REGISTRY=‘--insecure-registry 192.168.1.111:5000’ 然後重啟docker服務: service docker restart 然後重新推送映象到倉庫中。
1.4 配置Docker Registry管理介面
Docker官方只提供了REST API,並沒有給我們一個介面。 可以下載映象“hyper/docker-registry-web”來進行映象的管理。
具體的執行和使用,請參見官方文件:
預設的只是瀏覽倉庫中的映象,如果要刪除的話:
- 要建立一個給registry用的config.yml,在裡面設定可以delete,形如:
version: 0.1
log:
level: info
formatter: text
fields:
service: registry-srv
environment: production
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /tmp/registry
delete:
# 要在 ui 上能夠刪除映象,enable 的值必須是 true
enabled: true
http:
addr: :5000
-
建立一個給registry-web用的config.yml,這個官方網站上有
-
重新啟動registry,如:
docker run -d -p 5000:5000 --name registry-srv -v /ccuse/myregistry/registryconf/:/etc/docker/registry:ro -v /ccuse/myregistry/:/tmp/registry --privileged=true registry
-
重新啟動registry-web,形如:
docker run -it -d -p 8080:8080 --name registry-web --link registry-srv -v /ccuse/myregistry/forwebconf/config.yml:/conf/config.yml --privileged=true hyper/docker-registry-web
2 使用MySql映象
docker pull mysql
docker run --name mysql -p 12345:3306 -v /ccuse/programes/mysqldata:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=cc -d mysql
這裡指定了使用自己的mysql資料檔案
-
使用自定義配置檔案,在mysqlconf下放著my.cnf檔案:
docker run --name mysql -p 12345:3306 -v /ccuse/programes/mysqldata:/var/lib/mysql -v /ccuse/programes/mysqlconf:/etc/mysql/conf.d --privileged=true -e MYSQL_ROOT_PASSWORD=cc -d mysql
-
使用自定義日誌目錄
-v /ccuse/programes/mysqllogs:/var/log/mysql
如果日誌開啟不成功,可能是因為 mysql使用者沒有對日誌資料夾的操作許可權,進入到容器裡面,設定一下,示例如下:
chown -R mysql:mysql /var/log/mysql
-
資料表備份
docker exec 容器id sh -c 'exec mysqldump --all-databases -uroot -p"cc"' > /ccuse/all-databases.sql
3 使用Redis映象
docker pull redis
docker run --name myredis -d redis,預設暴露6379埠
- 如果想使用自己的配置檔案啟動redis,一種方法是在其基礎上寫一個dockerfile,例如:
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
另外一種方式是在啟動命令中修改配置,如:
docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
4:資料預設儲存在VOLUME /data目錄下,使用-v來指定掛載,如:
docker run --name myreis -d -p 6379:6379 -v /redisdocker/data:/data -v /redisconf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true redis redis-server /usr/local/etc/redis/redis.conf
注意:自己寫的conf檔案裡面,不要配置bind的ip,也不要daemonize的配置,直接註釋掉
5:如果需要開啟aof的持久化方式,預設是rdb的,可以在配置檔案裡面設定,也可透過命令列指定:
docker run --name some-redis -d redis redis-server --appendonly yes
6:如果應用需要連線redis:
docker run --name some-app --link some-redis:redis -d application-that-uses-redis
4 容器連線
4.1 簡介
前面學習到的埠對映,並不是唯一把docker連線到另一個容器的方法。docker有一個連線系統允許將多個容器連線在一起,共享連線資訊。docker連線會建立一個父子關係,其中父容器可以看到子容器的資訊。
有時出於安全原因,可以強制docker只允許有連線的容器之間互相通訊,可以在啟動docker守護程式的時候,加上–icc=false,關閉沒有連線的容器間通訊。
在docker run的時候, 指定–link :標誌建立了兩個容器間的父子連線,這樣容器就不用暴露埠了,大大增加安全性。
4.2 基本使用
基本語法:–link 要連線的容器的名字:這個連線的別名
-
執行連線需要依靠容器的名字,因此建立每一個容器的時候,請使用–name來命名。
注意:容器的名稱必須是唯一的。如果想使用重複的名稱來命名容器,需要使用docker rm命令刪除以前的容器。
-
被連線的容器必須執行在同一個Docker宿主機上
-
示例:
docker run --name db -e MYSQL_ROOT_PASSWORD=cc -d mysql
docker run -d -p 9080:8080 --name web --link db:dblink cctomcat:9.0 -
可以透過docker inspect檢視裡面的Links,如: “/db:/web/dblink”
4.3 啟動常見錯誤解決方案
如果啟動的時候,出現類似如下的錯誤:
COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -A DOCKER -p tcp -d 0/0 --dport 9080 -j DNAT --to-destination 172.17.0.4:8080 ! -i docker0' failed:
這可能是網路問題造成,解決方法如下:
-
首先先驗證docker容器內部網路是否能ping通宿主機
如果能ping通,即可透過重建docker0網路恢復
-
先停掉宿主機上執行的docker容器,然後執行以下命令
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0 -
重啟docker服務
如何使用容器連線來通訊
最簡單的方法就是在子容器裡面,也就是web裡面,直接使用link的別名來代替具體的host或者是ip地址,比如:
jdbc:mysql://dblink:3306/mydb
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2819/viewspace-2825661/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- docker學習筆記(2)- 倉庫Docker筆記
- docker學習筆記(3)- 映象Docker筆記
- 【Harbor學習筆記】-教你快速搭建Docker私有倉庫筆記Docker
- 【Docker】第四篇 Docker倉庫管理Docker
- Docker學習筆記:映象、容器、資料卷Docker筆記
- 取得 Git 倉庫 —— Git 學習筆記 04Git筆記
- 建立 Docker 映象倉庫指令碼Docker指令碼
- docker學習筆記-啟動映象輸入引數Docker筆記
- docker筆記37-docker私有倉庫的搭建Docker筆記
- Docker學習筆記(三):Dockerfile及多步驟構建映象Docker筆記
- Docker映象倉庫清理的探索之路Docker
- Docker企業級映象倉庫HarborDocker
- 記錄每次更新到倉庫 —— Git 學習筆記 10Git筆記
- Docker學習筆記Docker筆記
- Docker 學習筆記Docker筆記
- Docker倉庫之Registry私有映象倉庫的搭建與使用Docker
- 如何將docker 映象上傳到docker hub倉庫Docker
- 建立映象釋出到映象倉庫【不依賴docker環境】Docker
- Jenkins打Docker映象推送到私有倉庫JenkinsDocker
- 在宿主機上搭建docker映象倉庫Docker
- Docker筆記(四):Docker映象管理Docker筆記
- Docker筆記一之映象Docker筆記
- Docker Compose 學習筆記Docker筆記
- 容器技術之Docker私有映象倉庫docker-distributionDocker
- Docker進階與實踐之四:Docker映象倉庫Docker
- Docker倉庫之Harbor企業級映象倉庫的搭建與使用Docker
- Docker 學習筆記(第六集:使用 Dockerfile 定製映象)Docker筆記
- 遠端倉庫與 fetch 命令——Git 學習筆記 20Git筆記
- Docker刪除倉庫中的映象問題Docker
- 如何配置極狐GitLab Docker 容器映象倉庫GitlabDocker
- 容器技術之Docker私有映象倉庫harborDocker
- docker學習4:Docker 映象使用Docker
- Docker入門學習筆記Docker筆記
- Cris 的 Docker 學習筆記Docker筆記
- Linux基礎學習-Docker學習筆記LinuxDocker筆記
- Flutter學習筆記 - 安裝,映象,配置Flutter筆記
- 如何打包Docker映象並推送到遠端倉庫Docker
- 用 Docker 部署前端?你有私有映象倉庫嗎Docker前端