## Step 1: Check the disk size ```bash df -h ``` ## Step 2: Create a new disk 1. Go to Azure portal 2. Find the VM 3. Add a new disk ## Step 3: Format the disk ```bash sudo mkfs -t ext4 /dev/sdc ``` ## Step 4: Mount the disk ```bash sudo mkdir /data sudo mount /dev/sdc /data ``` ## Step 5: Add the disk to /etc/fstab ```bash echo "/dev/sdc /data ext4 defaults 0 0" | sudo tee -a /etc/fstab ``` ## Step 6: Install docker 1. Remove the old docker and some related packages ```bash sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ podman \ buidah \ runc 2. Set up the repository ```bash sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ``` 3. Install docker engine - List the available versions ```bash yum list docker-ce --showduplicates | sort -r ``` - Install the latest version or a specific version ```bash sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io ``` 4. Start docker ```bash sudo systemctl start docker sudo systemctl enable docker ``` 5. Verify the installation ```bash sudo docker --version sudo systemctl status docker ``` 6. Add the current user to the docker group, let the user use docker without sudo ```bash sudo usermod -aG docker $USER newgrp docker ``` ## Step 7: Modify the server initial location 1. new a folder in the new disk ```bash sudo mkdir /data/docker ``` 2. modify the docker service file ```bash sudo vim /usr/lib/systemd/system/docker.service ``` - Original ```yaml [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=docker.socket [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 -H fd:// containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always # Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229. # Both the old, and new location are accepted by systemd 229 and up, so using the old location # to make them work for either version of systemd. StartLimitBurst=3 # Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230. # Both the old, and new name are accepted by systemd 230 and up, so using the old name to make # this option work for either version of systemd. StartLimitInterval=60s # 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 # Comment TasksMax if your systemd version does not support it. # Only systemd 226 and above support this option. TasksMax=infinity # 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 [Install] WantedBy=multi-user.target ``` - Modified (docker verion < 1.2) ```yaml [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 -g /home/docker # modify this line ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always ``` - Modified (docker version >= 1.2) ```yaml [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 --data-root /home/docker ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always ``` 3. reload the service ```bash sudo systemctl daemon-reload sudo systemctl enable docker sudo systemctl restart docker ``` ## Reference - [安裝docker及docker-compose (CentOS8-stream) ](https://hackmd.io/P_3HM5jRTf-VWEhRxanB5g) - [使用入口網站將資料磁碟連結至 Linux VM](https://learn.microsoft.com/zh-tw/azure/virtual-machines/linux/attach-disk-portal?tabs=ubuntu)