다음과 같은 Flow로 AWS EC2에서 Git push를 하게 된다면 연결된 git repo의 git action (Work flow, Jobs)를 통해 Docker hub에 새로운 버전으로 업데이트 해주는 과정을 구현해 보았다.
개발을 한다면, 다음과 같은 세팅을 해 두고 시작한다면 편한 작업 환경을 가질 수 있을 것 같다.
1. AWS EC2에 Docker 설치
# 도커 설치 #
// 도커 설치
sudo yum install docker -y
// 도커 실행
sudo service docker start
// 도커 상태 확인
systemctl status docker.service
// Docker 관련 권한 추가
sudo chmod 666 /var/run/docker.sock
docker ps
// 도커 컴포즈 설치
sudo curl \\
-L "<https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$>(uname -s)-$(uname -m)" \\
-o /usr/local/bin/docker-compose
// 권한 추가
sudo chmod +x /usr/local/bin/docker-compose
// 버전 확인
docker-compose --version
2. 도커 권한 설정 및 컴포즈 설치
docker-compose 오류 해결
[root@ip-172-31-40-246 ~]# docker-compose --version
[27511] Error loading Python lib '/tmp/_MEINg29lk/libpython3.7m.so.1.0': dlopen: libcrypt.so.1: cannot open shared object file: No such file or directory
## 다음 코드로 해결
[root@ip-172-31-40-246 ~]# sudo yum install -y libxcrypt-compat
3. docker ci를 위한 node기반 Test application 생성
## Dockerfile
FROM node:4.2
COPY . /src
RUN cd /src && npm install
EXPOSE 4000
CMD ["node", "/src/server.js"]
## package.json
{
"name": "docker-test",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "Ritesh Yadav",
"license": "ISC"
}
## server.js
var http = require('http')
var port = 4000
var server = http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'})
response.end('Hello World, docker ci test \n')
})
server.listen(port)
console.log('Server running at http://localhost:' + port)
## 간단한 web application
4. Docker Push
## Docker Push
[root@ip-172-31-40-246 github-action-docker]# sudo docker push moveho/ci:1.0
The push refers to repository [docker.io/moveho/ci]
fc57a026f5be: Preparing
5f70bf18a086: Preparing
fa21271fd1f7: Preparing
cfad146009ce: Preparing
3d9a7bde211f: Preparing
656120ad8c56: Waiting
30f9a83f20f3: Waiting
78dbfa5b7cbc: Waiting
denied: requested access to the resource is denied #에러 발생
[root@ip-172-31-40-246 github-action-docker]# docker login # 로그인으로 해결
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: moveho
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
[root@ip-172-31-40-246 github-action-docker]#
[root@ip-172-31-40-246 github-action-docker]# sudo docker push moveho/ci:1.0
The push refers to repository [docker.io/moveho/ci]
fc57a026f5be: Pushed
5f70bf18a086: Mounted from library/node
fa21271fd1f7: Mounted from library/node
cfad146009ce: Mounted from library/node
3d9a7bde211f: Mounted from library/node
656120ad8c56: Mounted from library/node
30f9a83f20f3: Mounted from library/node
78dbfa5b7cbc: Mounted from library/node
1.0: digest: sha256:7fded78d68f3f098e03f7334dcc79726c6d41821ea5230578fe06eb211f424f8 size: 2620
5. Git push
[root@ip-172-31-40-246 Docker-CI]# git add Dockerfile package.json server.js
[root@ip-172-31-40-246 Docker-CI]# git commit -m "my docker ci test"
[master (root-commit) 9d377ad] my docker ci test
Committer: root <root@ip-172-31-40-246.ap-northeast-2.compute.internal>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:
3 files changed, 29 insertions(+)
create mode 100644 Dockerfile
create mode 100644 package.json
create mode 100644 server.js
root@ip-172-31-40-246 Docker-CI]# git push
Username for 'https://github.com': MachDn
Password for 'https://MachDn@github.com':
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MachDn/Docker-CI.git/'
# [에러 발생] 토근을 발급 받아야 됩니다.
다음과 같이 push 완료
6. Git action Workflow작성
[워크플로우 작성]
name: Push Docker Image to Docker Hub
on:
push:
branches: [master]
jobs:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Build and push Docker Image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: |
moveho/ci:latest
moveho/ci:${{ github.sha }}
7. Secret 생성
시크릿은 Name에 KEY 값 Secret 에 VALUE 값 형태로 넣어주면 된다.
비밀번호도 동일한 방식으로 올바른 KEY값과 함께 Secret을 생성해주면 된다.
8. Git action을 통한 버전 업데이트 (push)
올바른 시크릿과, 워크플로우 작성을 했다면 알맞게 도커에서 수정사항이 도커 허브로 새로운 버전으로 업데이트 되는 것을 볼 수 있다!
8.Test (Docker -> git push -> docker hub)
## 소스코드 변경
## 변경사항 git에 push
## 확인
## Push 감지후 자동으로 Gitaction 실행
## Git workflow 확인
정상 실행 완료 확인.
## Docker Hub 이미지 푸시 확인
9. 변경 사항 적용 및 배포 확인
[root@ip-172-31-40-246 Docker-CI]# docker run -p 4000:4000 moveho/ci:1a9eb5f6e200f63f0a64bd1dd8a00e3705aefbc6
## 최신 푸시 이미지로 컨테이너 실행 확인
## 변경사항 적용된 상태로 배포 성공 확인
10. 프로젝트 플로우 정리 및 회고
이로서, 다음과 같은 Flow로 AWS EC2에서 Git push를 하게 된다면 연결된 git repo의 git action (Work flow, Jobs)를 통해 Docker hub에 새로운 버전으로 업데이트 해주는 과정을 구현해 보았다.
개발을 한다면, 다음과 같은 세팅을 해 두고 시작한다면 편한 작업 환경을 가질 수 있을 것 같다.
'Docker' 카테고리의 다른 글
[Docker] Docker-swarm 구축 및 테스트 (0) | 2023.05.29 |
---|---|
[Docker] ERROR x509: certificate has expired or is not yet valid: current time 해결하기 (0) | 2023.05.25 |
[Docker] Installation traefik (0) | 2023.05.17 |
Install Compose standalone (0) | 2023.05.17 |
[CI/CD] Docker Jenkins - git webhook - deploy 시연 영상 (0) | 2023.04.28 |
댓글