Docker搭建私有倉庫並遷移

前摘

在內網(不能聯網)的某臺機器上,需要通過docker快速安裝redis、mysql等容器,因爲不能在線pull鏡像,所以需要一種從本地pull的解決方案

 

解決方案

準備兩臺機器:A機器(可以連接外網),B機器(內網機器、不可聯網)

步驟一:A機器安裝docker、這裏採用離線或在線安裝都可以

步驟二:A機器使用docker搭建私有倉庫registry

步驟三:A機器使用docker在線pull需要安裝的鏡像(redis、mysql等)

步驟四:A機器使用docker提交鏡像到私有倉庫registry

步驟五:等A機器鏡像提交完畢,使用docker將私有倉庫registry打包成tar包

步驟六:拷貝倉庫tar包到B機器,在B機器離線安裝docker

步驟七:B機器使用docker離線pull私有倉庫中的鏡像,完成需求

 

方案實現

下載docker離線安裝包:https://download.docker.com/linux/static/stable/x86_64/

本次使用的docker版本是:19.03.0.tgz

 

▶▶  A、B機器安裝docker

上傳tgz安裝包到/usr/local/下面並解壓

cd /usr/local
tar -zxvf docker-19.03.0.tgz  #解壓

將docker註冊成服務

      將解壓出來的docker文件內容移動到 /usr/bin/ 目錄下

cd /usr/local
cp docker/* /usr/bin/

        新建服務配置文件

vim /etc/systemd/system/docker.service

       將如下內容粘貼進去(不需要改動)

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

 

[Install]

WantedBy=multi-user.target

           添加文件權限

chmod +x /etc/systemd/system/docker.service

           加載、啓動、設置開機啓動

systemctl daemon-reload  # 重新加載單元

systemctl start docker   # 啓動docker

systemctl enable docker.service   # 設置開機啓動

         

▶▶  A機器準備數據

       下載docker registry倉庫鏡像

docker pull docker.io/registry

        創建倉庫目錄

mkdir -p /mnt/registry-data

        修改 /etc/docker/daemon.json文件、添加如下內容

{
  "insecure-registries":["127.0.0.1:5000"]
}

         重啓docker服務

systemctl restart docker

         運行registry鏡像,並將/mnt/registry-data目錄掛載到容器內的/var/lib/registry目錄

docker run -d --name=registry -v /mnt/registry-data:/var/lib/registry -p 5000:5000 docker.io/registry

         下載redis鏡像

docker pull redis

         修改redis鏡像tag

docker tag redis  127.0.0.1:5000/redis

         將redis上傳到倉庫

docker push 127.0.0.1:5000/redis

         cd進入/mnt/registry-data/docker/registry/v2/repositories目錄,查看redis是否被成功上傳(mysql上傳同上)

          使用docker將registry鏡像打包成registry.tar,放到/mnt目錄下

docker save -o /mnt/registry.tar docker.io/registry

          將registry-data倉庫目錄打包成registry-data.tar.gz,放到/mnt目錄下

cd /mnt
tar czvf registry-data.tar.gz registry-data  # 打包

           

▶▶  拷貝數據

將A機器上的/mnt目錄下面的registry.tar和registry-data.tar.gz拷貝到B機器的/mnt目錄下

 

▶▶  B機器運行redis、mysql鏡像

        修改 /etc/docker/daemon.json文件、添加如下內容

{
  "insecure-registries":["127.0.0.1:5000"]
}

       重啓docker服務

systemctl restart docker
 

      導入registry鏡像

docker load -i /mnt/registry.tar

      解壓registry-data倉庫目錄

tar xf /mnt/registry-data.tar.gz -C /mnt

      運行registry鏡像,並將/mnt/registry-data目錄掛載到容器內的/var/lib/registry目錄

docker run -d --name=registry -v /mnt/registry-data:/var/lib/registry -p 5000:5000 docker.io/registry

      從本地倉庫下載下載redis鏡像

docker pull 127.0.0.1:5000/redis

 

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