- gitlab에서 container registry를 사용
- IP를 사용했기에 SSL 적용 불가
- SSL을 사용하지 않고 container registry를 사용하에 불안정
- 향후 gitlab에 SSL 인증서를 사용하여 적용하는 방법 테스트 필요
container registry 활성화를 위하여 gitlab.rb 설정파일 변경
container registry 사용하기 위해서는 아래 내용 설정 필요
$ vi /etc/gitlab/gitlab.rb #### ...중략... gitlab_rails['gitlab_default_projects_features_container_registry'] = true ####... 중략... #################################################################### ## Container Registry settings ##! Docs: https://docs.gitlab.com/ee/administration/container_registry.html #################################################################### registry_external_url 'https://IP:8001'
- gitlab 설정을 변경하였다면 재설정과 재시작
$ gitlab-ctl reconfigure
- gitlab 페이지에 container resitry 생성 확인
flask를 활용하여 version 1을 확인할 수 있는 docker 이미지 생성
1. docker 이미지에 사용할 파일 내용 소개
version1의 flask 내용 → server.py
$ vi server.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, world!\n' @app.route('/version') def version(): return 'version 1\n' if __name__ == '__main__': app.run('0.0.0.0', port=9000, debug=True)
- python 서버를 실행하기 위해 필요한 flask 패키지 다운 → pip을 통해 flask 패키지를 docker 이미지 내에 다운
$ vi requirements.txt Flask==1.1.2
docker 이미지를 생성하기 위한 Dockerfile 파일 내용
$ vi Dockerfile FROM python:3.7-alpine WORKDIR /usr/src/app COPY . . RUN pip install --no-cache-dir -r requirements.txt EXPOSE 9000 ENTRYPOINT ["python3"] CMD ["server.py"]
2. docker 이미지 생성 → hippo_flask:v1으로 생성
- 이미지 이름 : hippo_flask
- 이미지 tag : v1
$ docker build -t hippo_flask:v1 ./ Sending build context to Docker daemon 4.096kB Step 1/7 : FROM python:3.7-alpine 3.7-alpine: Pulling from library/python 59bf1c3509f3: Already exists 8786870f2876: Already exists [...생략...] Step 6/7 : ENTRYPOINT ["python3"] ---> Running in 1cc769d232d6 Removing intermediate container 1cc769d232d6 ---> 07e5df487c7e Step 7/7 : CMD ["server.py"] ---> Running in 0383d99cef58 Removing intermediate container 0383d99cef58 ---> 64d54ca5156c Successfully built 64d54ca5156c Successfully tagged hippo_flask:v1
- 생성한 docker 이미지 확인
$ docker images hippo_flask REPOSITORY TAG IMAGE ID CREATED SIZE hippo_flask v1 64d54ca5156c About a minute ago 51.7MB
3. hippo_flask:v1 docker 이미지를 통해 컨테이너 생성과 확인
- 컨테이너 생성
$ docker run --name version1 -d -p 9000:9000 hippo_flask:v1 3d75997676b1f71d80eb72070ac3dbba9695ead6810b8d2a6cefcc1bad83b939
- 생성된 컨테이너 확인
$ docker ps | grep version1 3d75997676b1 hippo_flask:v1 "python3 server.py" 14 seconds ago Up 13 seconds 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp version1
생성된 컨테이너 통신 테스트
1. 생성된 컨테이너에 트래픽 전송하여 정상적으로 통신 되는지 curl 트래픽 전송 테스트
- curl 명령어를 통해 통신 확인
$ curl localhost:9000/version version 1
2. 생성된 컨테이너에 for문을 활용하여 연속적으로 트래픽 전송
- 배포하는 과정에서 변화를 알기 위해 curl를 for 통해 무한 사용
$ for (( ; ; )) do curl localhost:9000/version; sleep 1; done version 1 version 1 version 1 version 1 version 1 version 1 version 1 ^C
3. 생성한 컨테이너 종료
# 종료할 hippo_flask:v1 컨테이너 확인
$ docker ps | grep hippo_flask
3d75997676b1 hippo_flask:v1 "python3 server.py" 2 minutes ago Up 2 minutes 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp version1
# 해당 컨테이너 종료
$ docker rm -f 3d75997676b1
# 컨테이너가 출력되지 않았으므로 정상적으로 삭제된 것 확인
$ docker ps | grep hippo_flask
gitlab private container registry에 이미지 올리기
1. gitlab private container registry 로그인
gitlab에 container registry에 로그인 작업 필요 → [서버 IP]:8001로 로그인 시도
docker login 명령어 입력 후 Username과 Password를 입력하면 로그인됨
$ docker login [서버 IP]:8001 Username: root Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
- ※ 참고 → docker repository에 http로 접근하면 오류 발생
$ docker login [서버 IP]:8001 Username: root Password: Error response from daemon: Get "https://서버 IP:8001/v2/": http: server gave HTTP response to HTTPS client
해결 방법 → 접근 시도하는 서버의 docker 설정 변경(insecure-registries 내용 부분 추가)
$ vi /etc/docker/daemon.json { "insecure-registries": ["서버 IP:8001"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } # daemon.json를 적용하기 위해 docker 재실행 $ systemctl retart docker
2. gitlab private container registry에 등록할 image 생성
- [서버 IP]:8001 주소를 가진 gitlab에 /root/test 경로로 이미지 생성
$ docker build -t [서버 IP]:8001/root/test . Sending build context to Docker daemon 4.096kB Step 1/7 : FROM python:3.7-alpine ---> a1034fd13493 Step 2/7 : WORKDIR /usr/src/app ---> Using cache ---> 5ab0544a8338 Step 3/7 : COPY . . ---> Using cache ---> e1867730ab46 Step 4/7 : RUN pip install --no-cache-dir -r requirements.txt ---> Using cache ---> 6bb03c2fca00 Step 5/7 : EXPOSE 9000 ---> Using cache ---> fbbd26c4f799 Step 6/7 : ENTRYPOINT ["python3"] ---> Using cache ---> 07e5df487c7e Step 7/7 : CMD ["server.py"] ---> Using cache ---> 64d54ca5156c Successfully built 64d54ca5156c Successfully tagged 180.70.134.124:8001/root/test:latest
- 생성 이미지 이름 확인
$ docker images | grep -i "[서버 IP]:8001" [서버 IP]:8001/root/test latest 64d54ca5156c 33 minutes ago 51.7MB
3. gitlab private container registry에 이미지 push
- gitlab private container registry에 push 후http://[서버 IP]:8001/root/test/container_registry 접속해서 로그인하면 업로드된 화면을 확인 가능
$ docker push hippo7788/hippo_flask:v1 The push refers to repository [docker.io/hippo7788/hippo_flask] fca7f999dd38: Pushed 07a451b20a57: Pushed 20093ec82cc4: Pushed 4df147e7bcb6: Pushed 880c61470517: Mounted from library/python 45d4d0cf56eb: Mounted from library/python 619b8ea44798: Mounted from library/python a2f23be74558: Mounted from library/python e2eb06d8af82: Mounted from library/python v1: digest: sha256:d8a803d8b0d05dd42d0563c4151d370b5f9a50808611a62bdaeffd22332bcdce size: 2204
- gitlab private container registry에 업로드 확인
docker hub에 업로그한 이미지 다운받아서 확인 → 이전에 사용한 컨테이너와 이미지는 삭제
# 컨테이너 삭제 -> docker ps로 확인 가능 $ docker rm -f 5fefc9b6e072 5fefc9b6e072 # 이미지 삭제 -> docker images로 확인 가능 $ docker rmi -f hippo_flask Untagged: hippo_flask:v1 # 이미지 삭제 -> docker images로 확인 가능 $ docker rmi -f 8dc659fae720 Untagged: hippo7788/hippo_flask:v1 Untagged: hippo7788/hippo_flask@sha256:d8a803d8b0d05dd42d0563c4151d370b5f9a50808611a62bdaeffd22332bcdce Deleted: sha256:8dc659fae720e2989a727e504fc712a6433500a55ef8bba911fcd802dde65f74 Deleted: sha256:aa987e77dfe966494d486e3a7d49bcda9e46b3620471911ba59eecd4ca9c7736 Deleted: sha256:a4c264e5cc48f12f09b0a57670de350bc9ccd4aec7210411a21261938c4bee51 Deleted: sha256:ea20f857309d14f754678a3de6d98037473656f0654c4392ffb30f3d61d1716c Deleted: sha256:9c5b47ae8a6edd9e6d8549dde338997b5cd0e32f97d1b973c36301520afb2590 Deleted: sha256:be4379647236972f9cee3f1508c8821e619703060c2bb79058f746b36c8a31c3 Deleted: sha256:54ebb48e2f85190b5ac7a315e667becad4520727455c8e061861d89609dc3d31 Deleted: sha256:0458e8557286e301e0e59bc2555979a3ebbd0212012b54c25670d7375714b697 Deleted: sha256:bf7be436ba34ac4068d4c1f1eaf07d1d46ffc6457bc73dc2fd9a1dda39d0cd2b Deleted: sha256:38f374f0f73da0d857c17772f78c586cebfc3354f5fe8419a0bdb14a7a47b235 Deleted: sha256:a944a01d620ff5361172590ce45ea48dc38b8c564a154a99f876ae0bc0e01827
Docker Hub에 올린 이미지를 다운 후 컨테이너 실행 → hippo7788/hippo_flask:v1
1. Docker Hub에 있는 hippo7788/hippo_flask:v1 이미지를 통해 컨테이너 생성
이미지 다운 후 컨테이너 확인
$ docker run --name version1 -d -p 9000:9000 hippo7788/hippo_flask:v1 Unable to find image 'hippo7788/hippo_flask:v1' locally v1: Pulling from hippo7788/hippo_flask a0d0a0d46f8b: Already exists c11246b421be: Already exists c5f7759615a9: Already exists 6dc4dde3f226: Already exists f2db6ae633c1: Already exists 9c864080a3a4: Pull complete 615272ced259: Pull complete 82808996193e: Pull complete 71f74dbb2c6d: Pull complete Digest: sha256:d8a803d8b0d05dd42d0563c4151d370b5f9a50808611a62bdaeffd22332bcdce Status: Downloaded newer image for hippo7788/hippo_flask:v1 f478fb738e1f7cf8f10a787581910cc8cf5e966bf6c9bc2d328199c996947be1 # 생성된 컨테이너 확인 $ docker ps | grep version1 f478fb738e1f hippo7788/hippo_flask:v1 "python3 server.py" 42 seconds ago Up 41 seconds 0.0.0.0:9000->9000/tcp version1 # 생성된 이미지 확인 $ docker images hippo7788/hippo_flask REPOSITORY TAG IMAGE ID CREATED SIZE hippo7788/hippo_flask v1 8dc659fae720 2 hours ago 54MB
2. 생성된 컨테이너에 트래픽 전송하여 정상적으로 통신 되는지 curl 트래픽 전송 테스트
- 다운받은 이미지의 컨테이너가 실행되는 지 테스트
$ curl localhost:9000/version version 1
'Opensource(오픈 소스) > git(깃)' 카테고리의 다른 글
쿠버네티스 테스트 환경에 CI/CD 구성(VScode → jenkins → Github → ArgoCD → Kubernetes) (0) | 2022.07.30 |
---|---|
Centos7에서 gitlab 설치 (0) | 2022.07.30 |