24.01.20 최초 작성
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provider "virtualbox" do |vb|
vb.memory = 2048
end
if Vagrant.has_plugin?("vagrant-vbguest")
config.vbguest.auto_update = false
end
config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: [".git/"]
config.vm.provision "shell", inline: <<-SHELL
export DEBIAN_FRONTEND=noninteractive
sudo apt -y update
sudo apt install -y ca-certificates curl gnupg libnss-mdns
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=\"$(dpkg --print-architecture)\" signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt -y update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker vagrant
SHELL
config.vm.define "ceph" do |ceph|
ceph.vm.hostname = "ceph.local"
ceph.vm.network "private_network", ip: "192.168.56.101"
ceph.vm.disk :disk, size: "25GB", name: "extra1"
ceph.vm.disk :disk, size: "25GB", name: "extra2"
end
config.vm.define "registry" do |registry|
registry.vm.hostname = "registry.local"
registry.vm.network "private_network", ip: "192.168.56.102"
end
config.vm.define "node" do |node|
node.vm.hostname = "node.local"
node.vm.network "private_network", ip: "192.168.56.103"
end
config.vm.define "minio" do |minio|
minio.vm.hostname = "minio.local"
minio.vm.network "private_network", ip: "192.168.56.104"
minio.vm.disk :disk, size: "25GB", name: "extra1"
minio.vm.disk :disk, size: "25GB", name: "extra2"
end
config.vm.define "harbor" do |harbor|
harbor.vm.hostname = "harbor.local"
harbor.vm.network "private_network", ip: "192.168.56.105"
end
end
VAGRANT_EXPERIMENTAL="disks" vagrant up minio을 통해 가상 머신 생성, vagrant ssh minio을 통해 ssh 접속
각 디스크 xfs파일 형식으로 포맷, 마운트
sudo mkfs.xfs /dev/sdc -L DISK1
sudo mkfs.xfs /dev/sdd -L DISK2
# /etc/fstab에 다음 내용 입력
sudo vim /etc/fstab
$LABEL=DISK1 /mnt/disk1 xfs defaults,noatime 0 2
$LABEL=DISK2 /mnt/disk2 xfs defaults,noatime 0 2
sudo mkdir -p /mnt/disk1 /mnt/disk2
sudo mount -a
minio 실행docker run -d --name minio \
-p 9000-9001:9000-9001 \
-v /mnt/disk1:/data1 \
-v /mnt/disk2:/data2 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=secret%1 \
minio/minio \
server /data1 /data2 --console-address ":9001"
#/data1, data2를 server가 관리함, consoledms 9001번 지정, 9000번은 api
docker run -d --name minio -p 9000-9001:9000-9001 -v /mnt/disk1:/data1 -v /mnt/disk2:/data2 -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=secret%1 minio/minio server /data1 /data2 --console-address ":9001"
포트포워딩, 웹브라우저를 통해 접속
버킷 2개 생성
version: "3"
services:
minio:
image: minio/minio
container_name: minio
ports:
- 9000:9000
- 9001:9001
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=secret%1
command:
- server /data1 /data2 --console-address ":9001"
volumes:
- /mnt/disk1:/data1
- /mnt/disk2:/data2
vagrant up registry를 통해 가상머신 생성, vagrant ssh registry를 통해 ssh 접속
볼륨 생성 및 실행
docker volume create nexus-data
docker run -d -p 8081:8081 -p 5000-5001:5000 --name nexus \
-e INSTALL4J_ADD_VM_PARAMS="-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=512m" \
-v nexus-data:/nexus-data sonatype/nexus3
docker run -d -p 8081:8081 -p 5000-5001:5000 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=512m" -v nexus-data:/nexus-data sonatype/nexus3
포트포워딩, 웹브라우저를 통해 접속
Realm에서 Docker bearer Token 추가
docker exec -it nexus cat /nexus-data/admin.password을 통해 계정 접속, 계정 초기화 수행
Blob Store에서 다음과 같이 레지스트리 등록
Type : S3
Name : docker
Region : us-east-1
Bucket : nexus3
Access_Key ID : admin
Secret Acess Key : secret%1
Endpoint URL : http://192.168.56.104:9000
create repository를 통해 레지스트리 생성
docker(proxy)
name: docker-hub
Remote storage: https://registry-1.docker.io
Docker index: Use Docker Hub
Blob store: docker
docker(host)
name: docker-hosted
HTTP: 5001
Blob store: docker
docker(group)
name: docker
HTTP: 5000
Allow anonymous docker pull: check
Blob store: docker
Member repositories: docker-hub, docker-hosted
vagrant up node를 통해 가상머신 생성, vagrant ssh node를 통해 ssh 접속
/etc/docker/daemon.json에 다음과 같이 입력
{
"registry-mirrors": [
"http://192.168.56.102:5000"
],
"insecure-registries": [
"192.168.34.56:5000"
]
}
sudo service docker restart
docker info
docker pull ubuntu:latest
vagrant up harbor를 통해 가상머신 생성, vagrant ssh harbor를 통해 ssh 접속
gpg키 준비
sudo \
gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys 644FF454C0B4115C
sudo gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys 644FF454C0B4115C
curl -LO https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-online-installer-v2.8.2.tgz
tar xvzf harbor-online-installer-v2.8.2.tgz
openssl genrsa -out ca.key 4096
#SELF-SIGN CA 인증서
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=KR/O=grepp/OU=docker/CN=192.168.34.105" \
-key ca.key \
-out ca.crt
#SELF-SIGN CA 인증서
openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=KR/O=grepp/OU=docker/CN=192.168.34.105" -key ca.key -out ca.crt
openssl genrsa -out harbor.local.key 4096
openssl req -sha512 -new \
-subj "/C=KR/O=grepp/OU=docker/CN=harbor.local" \
-key harbor.local.key \
-out harbor.local.csr
openssl req -sha512 -new -subj "/C=KR/O=grepp/OU=docker/CN=haror.local" -key harbor.local.key -out harbor.local.csr
#서명 정보 확인
cat > v3.ext <<-EOF
#자체 서버 서명 수행
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.local.csr \
-out harbor.local.crt
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor.local.csr -out harbor.local.crt
/data로 이동sudo mkdir -p /data/cert
sudo cp harbor.local.key harbor.local.crt /data/cert
openssl x509 -inform PEM -in harbor.local.crt -out harbor.local.cert
harbor에 접근하는 모든 도커 node는 아래 파일을 /etc/docker/certs.d/harbor.local/에 복사sudo mkdir -p /etc/docker/certs.d/harbor.local/
sudo cp ca.crt /etc/docker/certs.d/harbor.local/
sudo cp harbor.local.cert /etc/docker/certs.d/harbor.local/
sudo cp harbor.local.key /etc/docker/certs.d/harbor.local/
.yml 수정cd harbor
cp harbor.yml.tmpl harbor.yml
prepare수행 및 harbor 실행./prepare
sudo docker-compose up -d
포트포워딩, 웹브라우저를 통해 접속
앞서 설정한 ID와 비밀번호 입력해 로그인
registries에서 New Registry Endpoint 설정
Provider : Docker Hub
Name : Hub
registries에서 New Registry Endpoint 설정Provider : Docker Registry
Endpoint URL : http://192.168.56.102:5000