sudo yum install docker
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be installed
--> Processing Dependency: runc >= 1.0.0 for package: docker-19.03.6ce-4.amzn2.x86_64
--> Processing Dependency: containerd >= 1.3.2 for package: docker-19.03.6ce-4.amzn2.x86_64
--> Processing Dependency: pigz for package: docker-19.03.6ce-4.amzn2.x86_64
--> Processing Dependency: libcgroup for package: docker-19.03.6ce-4.amzn2.x86_64
--> Running transaction check
---> Package containerd.x86_64 0:1.3.2-1.amzn2 will be installed
---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed
---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed
---> Package runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================
Package Arch Version Repository Size
===============================================================================================================
Installing:
docker x86_64 19.03.6ce-4.amzn2 amzn2extra-docker 37 M
Installing for dependencies:
containerd x86_64 1.3.2-1.amzn2 amzn2extra-docker 24 M
libcgroup x86_64 0.41-21.amzn2 amzn2-core 66 k
pigz x86_64 2.3.4-1.amzn2.0.1 amzn2-core 81 k
runc x86_64 1.0.0-0.1.20200204.gitdc9208a.amzn2 amzn2extra-docker 2.6 M
Transaction Summary
===============================================================================================================
Install 1 Package (+4 Dependent packages)
모든 서버는 장애 혹은 이슈 발생으로 인해 재시작할 경우가 있다. 재시작 시 바로 docker가 시작되도록 설정을 하려면 다음 명령어를 이용해 설정한다.
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service
$ sudo systemctl start docker
기본적으로 docker는 root 권한 계정으로 동작을 하게 되어 docker 명령어 앞에 sudo를 붙여야하는 불편한점이 있다. aws ec2 기본 유저인 ec2-user도 사용가능하도록 사용자를 추가해준다.
$ sudo usermod -aG docker ec2-user
사용자 추가 후 바로 명령어를 할 경우 안된다면 터미널 종료 후, 다시 접속해서 시도하면 된다.
$ docker ps
현재는 localhost를 통하여 볼수 있지만 외부 망, 다른 곳(원격지)에서 접속을 할 경우도 발생한다. 여러 서버를 관리하다 보면 다른 위치에 있는, 즉 다른 네트워크를 통해 들어올수 있어야 한다. 도메인이 있다면 DNS 설정 서비스를 통하여 해당 서버 IP로 접근 가능하도록 등록할 수 있다. 가비아, godaddy, 닷네임 등 웹호스팅 업체를 살펴보면 가끔 할인을 해서 저렴한 가격에 도메인을 구입할 수 있다.
이 문서에서는 닷네임에서 발급받은 테스트 도메인을 통해 연결해보겠다. 일단
를 접속해 본다.
접속 후, 로그인을 하면 내 정보를 들어가면 도메인 관리가 있다. 아래에 보면 관리라는 버튼을 누르면 도메인 관련된 설정을 관리하는 페이지로 넘어가게 된다.
도메인 서비스 관리 페이지로 오게 되면 좌측 사이드 바 메뉴에서 DNS 설정 - 도메인레코드관린(DNS)를 클릭한다.
다음 화면은 DNS 설정이 나오게 되는데 A레코드 설정에서 추가를 클릭한다. 닷네임 도메인 네임서버를 그대로 사용하게되면 무료로 이용이 가능하다. 추가 버튼을 누르고 나면 구매한 도메인 앞에 필요한 내용을 적으면 된다. 예를 들어 docker-repo.example.com을 입력(2번)하고 만들어 놓은 docker registry 서버 IP를 오른쪽(3번)에 넣으면 된다. 그 다음 저장을 누르게 되면 적용이 되지만 네임서버 변경에 적용되려면 시간이 필요하다. 각 업체마다 연결 처리를 해주는데 시간이 다 다르기 때문에 미리 해두는게 좋다.
$ docker tag hello-world docker-repo.example.com:5000/hello-world
연결한 도메인을 이용하여 tag를 붙여 이미지를 생성한다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 2d4f4b5309b1 4 months ago 26.2MB
docker-repo.example.com:5000/hello-world latest bf756fb1ae65 10 months ago 13.3kB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
localhost:5000/hello-world latest bf756fb1ae65 10 months ago 13.3kB
이미지를 확인하면 기존에 localhost로 만들어진 것 외에 도메인을 이용해서 tag한 이미지가 만들어져 있다. 이 상태에서 docker push를 하면 실패하게 된다.
$ docker push docker-repo.example.com:5000/hello-world
The push refers to repository [docker-repo.example.com:5000/hello-world]
Get https://docker-repo.example.com:5000/v2/: http: server gave HTTP response to HTTPS client
docker registry는 로컬머신에서 사용하는게 아니라면 https만 지원을 하기 때문에 생기는 오류이다. 원격 접속하기 위해 docker registry 설정을 추가해 주어야 한다.
$ docker stop docker-registry && docker rm docker-registry
docker-registry
docker-registry
현재 올라가 있는 registry 컨테이너를 내리고 삭제한다.
SSL 인증서를 발급을 해야하는데 돈이 있다면 구입해서 사용하면 된다. 하지만 테스트나 개인용으로 사용하기에는 개인 서명 SSL을 생성하여 사용해도 충분하다. openssl을 이용하여 개인키를 생성할 것인데 ec2에는 이미 설치되어 있을 것이다.
$ openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
$ mkdir sslkey && cd sslkey && openssl genrsa -des3 -out docker.key 2048
Generating RSA private key, 2048 bit long modulus
.............................................................................................+++
.+++
e is 65537 (0x10001)
Enter pass phrase for docker.key:
Verifying - Enter pass phrase for docker.key:
개인 서명 키를 생성하고 비밀번호를 누르고 enter, 다시 한번 같은 비밀번호를 입력하고 enter를 누르면 생성된다. 다음은 인증 요청서를 생성한다.
$ openssl req -new -key docker.key -out docker.csr
Enter pass phrase for docker.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:Gurogu
Organization Name (eg, company) [Default Company Ltd]:google
Organizational Unit Name (eg, section) []:Test
Common Name (eg, your name or your server's hostname) []:docker-repo.example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Test
An optional company name []:google
인증서 발급을 위한 csr 파일을 생성한다. key파일에서 입력한 비밀번호를 넣으면 생성을 시작한다. 서명 내용은 크게 상관 없으나 대충 맞춰서 입력을 한다.
$ cp docker.key docker.key.origin && openssl rsa -in docker.key.origin -out docker.key && rm docker.key.origin Enter pass phrase for docker.key.origin:
writing RSA key
$ openssl x509 -req -days 730 -in docker.csr -signkey docker.key -out docker.crt
Signature ok
subject=/C=KR/ST=Seoul/L=Gurogu/O=google/OU=Test/CN=docker-repo.yamflix.shop
Getting Private key
개인키에서 패스워드를 제거하고 인증 기간을 설정하여 생성한다. 인증 기간은 원하는 기간만큼 설정하면 되는데 여기서는 1년으로 생성하였다.
$docker run -d -p 5000:5000 --restart=always --name docker-registry \
-v /home/ec2-user/sslkey:/certs \
-e Re
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/docker.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/docker.key \
registry
3984fde85abc4d7fadd2b99e507e73af07af410e918e33d20d2da213664ba7d9
2번째 /home//sslkey 부분에서 자신의 linux username으로 폴더가 생성되어 있으므로 username부분을 수정하여 입력하고 컨테이너를 실행한다. 여기선 aws ec2를 사용하여 ec2-user로 입력하면 된다.
docker registry가 실행이 되면 로컬에서 다시 push를 시도한다.
$ docker push docker-repo.example.com:5000/hello-world
The push refers to repository [docker-repo.example.com:5000/hello-world]
Get https://docker-repo.example.com:5000/v2/: x509: certificate signed by unknown authority
사설 인증서를 사용하면 현재 사용하는 서버의 docker가 push를 하지 못하는 것이다. insecure-registry를 추가하여 설정하면 가능하다.
$ echo '{ "insecure-registries":["docker-repo.example.com:5000"] }' > /etc/docker/daemon.json
위 명령어를 통해 insecure-registries를 추가하여 pull을 하면 성공한다.
RBAC Authorization (0) | 2021.10.20 |
---|---|
K8S ingress에 대하여 (0) | 2021.06.24 |
K8S Master Clustering 설치 및 구성 (0) | 2020.05.28 |
K8S node Internal IP 변경 (0) | 2020.04.23 |
Docker 설치 및 세팅(CentOS 7) (0) | 2020.01.07 |
댓글 영역