리눅스데브코스 [16주차 - 1]<리눅스 컨테이너와 Docker (3) 실습>

심우열·2023년 7월 17일
0

1. Ansible이 설치되어 있는 VM 작성

1. Vagrantfile

  • 내 환경에서는 IP 주소 설정이 불가능하다고 함
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  
  config.vm.box = "bento/ubuntu-20.04-arm64"
  config.vm.hostname = "ansible.local"

  config.vm.provider "vmware_fusion" do |vw|
          vw.memory=4096
  end

  if Vagrant.has_plugin?("vagrant-vbguest")
          config.vbguest.auto_update = false
  end
 
  config.vm.network "private_network"#, ip: "192.168.33.46", gateway: "192.168.33.1", dns: "8.8.8.8"
  config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: [".git/"]

  config.vm.provision "shell", inline: <<-SHELL
  #다음은 ansible을 설치하기 위한 쉘스크립트 시작
    export DEBIAN_FRONTEND=noninteractive
    sudo apt -y update
    sudo apt install -y ca-certificates apt-transport-https
    sudo apt install -y software-properties-common curl
    sudo apt install -y python3-pip python-is-python3
    sudo add-apt-repository --yes --update ppa:ansible/ansible
    sudo apt install -y ansible
    sudo pip3 install docker
  # 쉘스크립트 끝
  SHELL
end

2. Docker 설치하는 Playbook 작성

ansible-playbook/ roles/docker-install/tasks/main.yml

# tasks file for nginx
# Docker GPG key(APT) 추가하기
- name: Add Docker GPG apt Key
  apt_key:
   url: https://download.docker.com/linux/ubuntu/gpg
   state: present

# Docker Repository 추가하기
- name: Add Docker Repository
  apt_repository: 
   repo: deb https://download.docker.com/linux/ubuntu focal stable
   state: present

# Docker CE 설치하기
- name: Update apt and install docker-ce
  apt: 
   name: docker-ce
   state: latest
   update_cache: true

3. Docker CE 설치

1. Docker Registry Pull Through Cache 구성

2. Ansible 플러그인 확장

# community.docker 플러그인 설치
sudo ansible-galaxy collection install community.docker
# 설치된 플러그인 리스트 확인
sudo ansible-galaxy collection list

4. Ansible Docker 규칙 활용

1. community.docker.* 규칙

1. 이미지 Pull 규칙(Docker Pull

community.docker.docker_image:

  • name: [이미지 이름]
  • source: pull

2. 이미지 컨테이너 생성 규칙(Docker run)

community.docker.docker_container:

  • name: [컨테이너 이름]
  • image: [이미지 이름]
  • commnad: [컨테이너 실행시 명령어]
  • mounts: [컨테이너 실행 시 Bind 할 정보]
  • state: present

5. 새로운 Role 생성

1. Docker Registry Role 디렉토리 생성

ansible-playbook/roles/docker-registry/

2. Task 정의하기

ansible-playbook/roles/docker-registry/tasks/main.yml

# 1. Pull Docker Registry image
- name: Pull Docker Registry image
  community.docker.docker_image:
    name: registry:2
    source: pull

# 2. Create directory for registry config.yml
- name: Create directory for registry config.yml
  file: 
    path: /etc/docker/registry
    state: directory

# 3. Configure registry config.yml
- name: Configure registry config.yml
  copy: 
    dest: /etc/docker/registry/config.yml
    content: | 
      proxy:
        remoteurl: https://registry-1.docker.io

# 4. Create docker registry container
- name: Create docker registry container
  community.docker.docker_container:
    name: registry
    image: registry:2
    detach: true
    recreate: true
    restart_policy: unless-stopped
    mounts:
    - type: bind
      source: /etc/docker/registry/
      target: /etc/registry
    ports:
    - 5000:5000
    state: started

# 5. Update daemon.js
- name: Update daemon.json
  copy:
    dest: /etc/docker/daemon.json
    content: |
      {
        "registry-mirrors": ["http://localhost:5000"]
      }

# 6. Restart docker daemon
- name: Restart docker daemon
  systemd:
    name: docker
    state: restarted

6. site.yml 구성

1. ansible-playbook/site.yml

---
- hosts: localhost
  become: yes
  connection: local
  roles:
     - docker-install
     - docker-registry

7. 실행

ansible-playbook site.yml

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 잘 정리되어 있네요. 감사합니다.

답글 달기