도커 설치, dockerfile 작성, 컨테이너 이미지 생성, 컨테이너 이미지 배포
1. 도커 설치
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
[에러 발생]
네?
이렇게까지 긴 에러 페이지는 처음 봤다.
보니까 같은 파일이 중복된 게 많아서 생기는 오류이다.
아래의 블로그를 참고했다.
https://itsfoss.com/fixing-target-packages-configured-multiple-times/
[Solved] Target Packages is configured multiple times Error
Seeing repository configured multiple times error while updating your system with apt update command? Here's what you can do about it.
itsfoss.com
내 오류 코드를 보니 1번줄과 58번줄의 중복된 값이 많다고 해서
백업을 한 이후에 소스 파일에 들어가서 수정했다.
나의 경우에는 58번 줄을 삭제했다.
성공!!
바로 다음 명령어에서 바로 오류가 났다...ㅎ
- sudo rm /var/lib/apt/lists/lock
- sudo rm /var/cache/apt/archives/lock
- sudo rm /var/lib/dpkg/lock*
전에 발생했던 오류들이라 위의 명령어들로 lock 걸린 파일들을 풀어주었다.
sudo apt-get install docker-ce
sudo apt-get install docker-ce-cli
sudo apt-get install containerd.io
docker version
도커 버전 확인으로 마무리했다.
2. 설치된 도커의 기본 네트워크 분석
sudo docker network ls
설치가 완료된 도커 네트워크 이름을 확인해보면 bridge, host, none 3가지 네트워크가 생성된 것을 확인할 수 있다.
sudo docker network inspect bridge
bridge 네트워크의 상세 네트워크 주소를 확인하는 과정이다.
이중 'bridge' 네트워크의 상세 정보를 조회해보면 '172.17.0.0/16'으로 서브넷이 설정되어 있고
해당 대역의 IP주소인 '172.17.0.1'은 'docerk0' 라는 브리지의 Gateway 주소로 할당 된 것을 알 수 있다.
sudo apt install net-tools
ifconfig
네트워크 툴을 설치한 후에 설치된 서버의 네트워크 인터페이스 정보를 조회해 봤다.
확인할 수 있는 내용
1. docker0 브리지에 Gateway 주소 '172.17.0.1'이 할당되어 있다.
2. ens33 (물리 이더넷 장치)에는 '10.100.0.130'이 할당되어 있다.
3. Dokerfile 만들기
gedit server_info.php
<?php
$arr = array('OS' => php_uname('s'), 'Ver' => php_uname('v'), 'HostName' => php_uname('n), 'IP' => $_SERVER['SERVER_ADDR"], 'Date' => date("Y-m-d H:i:s"));
print_r(json_encode($arr,JSON_UNESCAPED_UNICODE));
?>
입력후 해당 코드 입력해서 Apache 웹서버가 올라가는 컨테이너의 정보(OS종류, OS버전 정보, 호스트 네임, IP 주소, 시간 정보 등)을 JSON 포멧으로 출력하는 PHP 예제 파일 'server_info.php'을 아래와 같이 하나 생성한다.
gedit Dockerfile
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y apache2
RUN apt-get install -y php
COPY server_info.php /var/www/html
ENTRYPOINT apachectl -D FOREGROUND
EXPOSE 80/tcp
입력후 해당 코드 입력해서 Apache 웹서버와 PHP 웹언어를 설치하고 앞에서 생성한 PHP 예제파일 'server_info.php'을
'/var/www/html' 디렉토리로 복사하는 Dockerfile을 하나 생성해준다.
아래는 도커파일 명령어별 인자값에 따라 어떻게 동작하는지를 정리해 놓은 표이다.
4. 컨테이너 이미지 생성하기
도커 파일과 server_info.php 파일이 생성된 것을 확인할 수 있다.
sudo docker build -t linarena/myimage:0.1 .
코드를 해석해 보자면
'linarena' 라는 도커허브 계정에 0.1 버전을 의미하는 임의의 태그를 지정하여 'myimage' 라는 도커 컨테이너 이미지를 현재 디렉토리(.)에 생성하였다.
5. 컨테이너 이미지 동작 확인하기
이미지가 제대로 동작하는지 확인하는 코드이다.
TCP 포트는 80번으로 호스트와 매칭하고, 터미널 접속해서 입출력 제어가 가능하면서 백그라운드 데몬으로 실행되도록 설정, 컨테이너 이름은 'apach_php'로 지정, 컨테이너가 시작할 는 bash 쉘을 사용하도록 옵션을 설정해 컨테이너 이미지 'linarena/myimage'를 아래와 같이 실행해준다.
sudo docker run -i -t -d -p 80:80 --name apache_php linarena/myimage:0.1 bin/bash
sudo docker ps
아래와 같이 현재 실행중인 도커 컨테이너의 ID정보와 설정정보를 확인할 수 있다.
6. 컨테이너 이미지 배포하기
앞에서 생성한 도커 컨테이너 이미지를 도커 허브의 Repository에 업로드하여 배포하는 과정이다.
우선 도커 허브 계정으로 로그인한다.
로그인이 성공한다면 "Login Succeeded"라는 메세지가 출력된다.
sudo docker login -u <사용자 ID> -p <사용자암호>
sudo docker login -u linarena -p #$%^^$#$%
그리고 push 명령어로 생성한 도커 컨테이너 이미지 'linarena/myimage:0.1'을 로그인 한 계정으로 업로드한다.
sudo docker push linarena/myimage:0.1