問題一:鏡像數據問題
由於容器重啓後數據會被清空,所以docker中的數據需要通過映射存放到本地磁盤持久化,啓動docker鏡像的時候加-v diskPath:dockerPath的參數。例如:
docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /opt/data/mysql:/var/lib/mysql -p 3306:3306 mysql
問題二. 容器中的時區與語言的問題
在docker容器中默認時間是UTC時間,北京是+8時區。默認語言爲POSIX,則需在編譯docker image的時候需要指定語言和時區的環境變量:
ENV LC_ALL en_US.UTF-8,ENV TZ=Asia/Shanghai
問題三 docker 容器中systemctl問題
在容器中使用systemctl報Failed to get D-Bus connection: Operation not permitted的錯誤,則在啓動的時候把sys/fs/cgroup
映射到docker容器中。
docker run --privileged --name=test --hostname=test -v /sys/fs/cgroup:/sys/fs/cgroup image /usr/sbin/init
問題四 docker容器存放問題(最坑)
默認情況下Docker的存放位置爲:/var/lib/Docker。一般根下分區我們不會給太大。鏡像和容器越存越多一般我們有兩種解決方法
1、掛載大分區到/var/lib/docker:
一般選擇建立邏輯分區lvm,方便後期擴展集體。
a.建立新分區,並格式化
PS: 以下操作建設你已經有現成的卷組,直接可以劃邏輯卷。或者你可以自己創建邏輯卷,或者不適用邏輯卷直接使用分區
lvcreate -L 300G lv_docker vg_home
mkfs.ext4 /dev/vg_home/lv__docker
b.掛載新分區到臨時掛載點
mkdir /mnt/docker
mount /dev/vg_home/lv_docker /mnt/docker/
c.停掉docker後拷貝/var/lib/docker下數據到臨時掛載點
service docker stop
cp -r /var/lib/docker/* /mtn/docker
d.修改/var/lib/docker 爲//var/lib/docker.bak,並創建/var/lib/docker
mv /var/lib/docker{,.bak}
mkdir /var/lib/docker
e.掛載新分區到/var/lib/docker,並設置開機自動掛載。
mount /dev/vg_home/lv_docker /var/lib/docker
vim /etc/fstab
---
/dev/vg_home/lv_docker /docker_data ext4 defaults 0 0
----
f.檢測docker是否可用,數據是否完整
docker images
docker ps -a
g.確認無誤後卸載臨時掛載點,刪除/var/lib/docker.bak
umount /mnt/docker
rm -rf /var/lib/docker.bak
2、修改鏡像和容器的存放路徑:
a.很簡單,指定鏡像和容器存放路徑的參數是--graph=/var/lib/docker。只需要修改配置文件指定啓動參數即可
vim /etc/sysconfig/docker
------------
other_args="--graph=/docker"
------------
b.停掉docker
service docker stop
c.備份數據到新容器存放目錄
cp -r /var/lib/docker /docker/
d.修改源存放目錄名稱
mv /etc/lib/docker{,.bak}
e.啓動docker
service docker start
f.測試
docker images
docker ps -a