도커 이미지를 만들고 서비스 하는 과정까지 보자~
구성1
개발자 ------- Server(도커설치,도커 파일)----------(올리기)---Container Registry-------NKS--사용자 접속
구성2
개발자 --Server(도커설치,도커 파일)----(올리기)Git------(올리기)Container Registry ---NKS-사용자 접속
1
# Docker 설치하기 ?
dnf install -y docker-ce --allowerasing
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo vi /etc/yum.repos.d/docker-ce.repo
#baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
baseurl=https://download.docker.com/linux/centos/8/$basearch/stable
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker -version
systemctl enable --now docker
systemctl status docker
systemctl start docker
systemctl enable docker
지원 버전
https://download.docker.com/linux/centos/
1
cat << EOF > Dockerfile
FROM nginx:latest
RUN echo '<h1> test nginx web page </h1>' >> index.html
RUN cp /index.html /usr/share/nginx/html
EOF
FROM : Base Image
RUN : shell command를 docker image에 실행
WORKDIR : 작업 디렉토리
EXPOSE : 호스트와 연결할 포트 번호를 지정
CMD : application을 실행하기 위한 명령어
2
# 빌드
# nginx 는 컨테이너 이름 , image는 이미지 이름
# 이미지를 만들고, 컨테이너를 실행 시킨다.
docker build -t test-image .
Trying to pull registry.access.redhat.com/nginx:latest...
Error: creating build container: initializing source docker://registry.access.redhat.com/nginx:latest: reading manifest latest in registry.access.redhat.com/nginx: unauthorized: access to the requested resource is not authorized
[root@ncp-com1-12-24-1 environment]#
4
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test-image latest 3eaf3b495f1d 11 seconds ago 192MB
5
docker run -p 8080:80 --name test-nginx test-image
docker run -p 8080:80 --name 컨테이너_이름 이미지_이름
6
# 별도 터미널2
docker ps
[root@demo1 environment]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3192fb93622 test-image " " About About 0.0.0.0:8080->80/tcp, :::8080->80/tcp test-nginx
docker logs -f test-nginx
[root@demo1 environment]# docker logs -f [CONTAINER]
Usage: docker logs [OPTIONS] CONTAINER
7
# 도커에 로그인 하는 법 = -it 옵션
docker exec -it test-nginx /bin/bash
[root@ip-172-31-40-122 ~]# docker exec -it test-nginx /bin/bash
root@bfcccd5aee49:/#
root@bfcccd5aee49:/#
8
확인 ?
[root@eksctl-host ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c39ffd44d510 test-image "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp test-nginx
9
# 도커에 로그인 하는 법 = -it 옵션
[root@eksctl-host ~]# docker exec -it c39ffd44d510 /bin/bash
root@c39ffd44d510:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home index.html lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
10
root@c39ffd44d510:/# more index.html
<h1> test nginx web page </h1>
1
참고 자료
https://brunch.co.kr/@topasvga/2095
https://brunch.co.kr/@topasvga/2441
1
레지스트리 업로드 ?
레파지토리 이름은 test-image
Bucket Management
// 버킷 이름은 유일해야 한다. nginx-web-bucket1
레지스트리 이름도 유일해야 한다. nginx-web-reg1
// 리눅스 서버에 도커가 설치 되어 있어야 한다.
혹, 오류가 발생하면 업데이트 필요
container_linux.go:235: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""
yum -y update
(10분 소요)
[root@test-web01 ~]# docker exec -it test-nginx /bin/bash
root@e494216f26dd:/#
root@e494216f26dd:/# ls
bin dev docker-entrypoint.sh home lib media opt root sbin sys usr
boot docker-entrypoint.d etc index.html lib64 mnt proc run srv tmp var
root@e494216f26dd:/# exit
ncloud 콘솔
마이페이지
계정관리
인증키 관리
4
# docker push 프라이빗 엔드 포인트/<TARGET_IMAGE[:TAG]>
The push refers to a repository [n0jw34vw.kr.private-ncr.ntruss.com/test-image]
b35a9b6182f4: Pushed
539984d66b34: Pushed
e4b39f949587: Pushed
53db376e88c7: Pushed
Container Registry 가서 확인
이미지 리스트 이동
이미지 이름
test-image
k create secret docker-registry regcred --docker-server=lef10.kr.private-ncr.ntruss.com --docker-username=ncp_iam_BPt2Ng --docker-password=ncp_iam_BPKMKR0mFbGTc5 --docker-email=topasvga@kakao.com
# 재 테스트 필요 ~~~~~
lef1iv60.kr.private-ncr.ntruss.com/test-image:1.1
cat <<EOF | k create -f -
EOF
cat <<EOF | k create -f -
EOF
1
sudo su -
vi Dockerfile
FROM ubuntu:18.04
# Install dependencies
RUN apt-get update && \
apt-get -y install apache2
# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html
# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \
echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \
chmod 755 /root/run_apache.sh
EXPOSE 80
CMD /root/run_apache.sh
2
빌드 ?
docker build -t hello-world .
3
도커 이미지 확인 ?
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest cd554e0b06c6 32 seconds ago 196MB
ubuntu 18.04 81bcf752ac3d 4 weeks ago 63.1MB
4
이미지를 컨테이너로 실행 ?
docker run -t -i -p 80:80 hello-world
// Could not reliably determine the server's fully qualified domain name" 메시지는 무시해도 됩니다.
5
docker ps
docker ps -a
6
#다른 터미널에서 exec로 컨테이너로 로그인 ?
docker exec -it 41f7105d2b3f /bin/bash
//41f7105d2b3f 는 Container ID이다.
7
# 컨테이너로 로그인 한 상태, 명령어 사용해 본다.
root@41f7105d2b3f:/# cd /var/www/html/
root@41f7105d2b3f:/var/www/html# ls
index.html
root@41f7105d2b3f:/var/www/html# more index.html
Hello World!
root@51e7d9d8864f:/var/www/html# exit
(컨테이너에서 나가기)
8
# 서비스 상태 Up 확인 ?
[root@ip-10-0-0-230 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41f7105d2b3f hello-world "/bin/sh -c /root/ru…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp elastic_dirac
9
# 중지하기 ?
[root@ip-10-0-0-230 ~]# docker stop 41f7105d2b3f
10
# 정상 종료 확인 = Exited 는 정상 종료
# 컨테이너 이름 확인
[root@ip-10-0-0-230 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41f7105d2b3f hello-world "/bin/sh -c /root/ru…" 5 min Exited (137) 3 sec elastic_dirac
11
# 컨테이너 삭제하기 ?
docker rm 컨테이너-이름
docker rm elastic_dirac
1
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test-image latest 86a04572f50c 10 seconds ago 133MB
demo2 latest 6dca039085a0 26 minutes ago 60.7MB
demo-flask-backend latest 53d888792869 About an hour 198MB
hello-world latest 53d888792869 About an hour ago 198MB
2
# 레파지토리 만들기 ?
hello-repository
# git에서 프로그램된 docker 파일을 가져와 빌드하고 push 하기도 한다.
Git에서 docker 파일을 가져온다.
빌드한다.
레파지토리에 Push 한다.
레파지토리에 이미지를 NKS에서 사용한다.
1
yum install git
2
# github에 공유한 배포할 파일 가져오기.
git clone https://github.com/ㅌㅌㅌㅌㅌㅌㅌㅌ/xxxxxx.git
2
# 레파지토리 만들기
리파지토리 이름과 이미지 태그 확인
https://brunch.co.kr/@topasvga/4194