2022. 11. 16. 23:09ใSystem ์์ ์ค/Docker
๐ ๋ชฉ์ฐจ
โ [DevOps - CentOS 7.9] Docker Local Registry (๊ฐ์ธ Docker Hub) ๊ตฌ์ถํ๊ธฐ
โ [DevOps - CentOS 7.9] Docker Local Registry ์ฌ์ฉ๋ฒ
โ [DevOps - CentOS 7.9] Docker Remote Registry ์ฌ์ฉ๋ฒ
๐ ์๊ฒฉ์ง Docker Hub ์ค์
๐ฝ ๊ฐ์
๐ฆ ์ค๋นํ๊ธฐ
์์ ๋ฐฉ๋ฒ์ Local Docker Image๋ฅผ Pushํ๊ณ , Pullํ ์ ์๋ ๋ฐฉ๋ฒ์ด์์.
๋ง์ฝ Resistry๊ฐ ์๊ฒฉ์ง์ ์๋ค๋ฉด ์๋์ ๊ฐ์ด ์ค์ ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ต์ด ์๊ฒฉ์ง์ ๋ํ ์ค์ ์ ํ๊ธฐ ์ํด์ SSL/TLS ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํด ์ฃผ์ด์ผ ํด์.
์ด ๋๋ฌธ์ SSL/TLS ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ํด์๋ ์ด ๊ณณ์ ์ค๋นํด ๋์์ด์.
์ค๋นํ ์ ๋ฆฌ ๋ถ๋ถ์์ SSL/TLS ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด ์ฃผ์์ผ๋ ์ด์ ์ ์ฉ์ ์์ผ ๋ณผ๊ฒ์.
์ต์ด Server์์ ์์ฑ๋ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Registry Container๋ฅผ ์ฌ ์์ํด์ฃผ์ด์ผ ํด์.
๋ง์ฝ Registry๊ฐ ๊ธฐ๋์ค์ด๋ผ๋ฉด ์๋ ๋ช
๋ น์ด๋ฅผ ํตํด Container๋ฅผ ์ค์งํ๊ณ , ์ญ์ ํด ์ฃผ์ธ์.
docker stop {Container ID} // Container ์ค์ง
docker rm {Container ID} // Container ์ญ์
์ต์ด ์ฃผ๋ํ๋์ Docker Registry๋ฅผ Web์ผ๋ก ๋ณด์ฌ์ฃผ๋ Container๋ถํฐ ๋ด๋ฆฌ๊ณ , ์์ ๋ฒ๋ ธ์ด์.
์ด Container๋ Docker Registry์ ์ข
์ํด์ ๊ธฐ๋์ค์ด๊ธฐ ๋๋ฌธ์ด์์.
๊ทธ๋ฐ ๋ค Docker Registry Container๋ ๋ด๋ฆฌ๊ณ , ์์ ๋ฒ๋ ธ์ด์.
๐ฝ ์ธ์ฆ์ ์ ์ฉ
๐ฆ Docker Registry
์ด์ ์ธ์ฆ์๋ฅผ ์ ์ฉํ๊ณ , Container๋ฅผ ์ฌ ๊ธฐ๋ ํด ๋ณผ๊ฒ์.
docker run -itd \
--restart=always \
--name={Container Name} \
--ip {Container IP} \
-v {์ธ์ฆ์ ๋ง๋ Sever์ ์ธ์ฆ์ Directory Path}:{Container ๋ด๋ถ ์ธ์ฆ์ ๋ณด๊ดํ Directory} \
-v /opt/docker/volume_mapping/registry:/var/lib/registry/docker/registry/v2 \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE={Container ๋ด๋ถ ์ธ์ฆ์ ๋ณด๊ดํ Directory}/server.crt \
-e REGISTRY_HTTP_TLS_KEY={Container ๋ด๋ถ ์ธ์ฆ์ ๋ณด๊ดํ Directory}/server.key -p 5000:5000 \
registry:latest
์ฃผ๋ํ๋์ ์์ ๊ฐ์ด Docker๋ฅผ ๊ธฐ๋ ์์ผ ์ฃผ์์ด์.
์ผ๋จ ์์ ๊ฐ์ด Container๊ฐ ๊ธฐ๋ ์ค์ธ๊ฑธ ํ์ธํ์์ด์.
๐ฆ Jenkins
์ฃผ๋ํ๋์ด ํ๋ํ๊ณ ์๋ ๊ฐ๋ฐ ํ๋ก์ ํธ ๊ธฐ๊น๋๋ ์ฌ๋๋ค์ CI/CD๋ฅผ ์ํด Jenkins์ Docker๋ฅผ ์ด์ฉํ๊ณ ์๊ณ , ์ฃผ๋ํ๋์ Docker Image๋ฅผ ์ ์ฅํ๊ธฐ ์ํ Docker Registry๋ฅผ ๋ง๋ค๊ณ ์์ด์.
Docker Registry์ push๋ฅผ ํ๊ณ ์ ํ๋ Client์์๋ SSL/TLS ์ธ์ฆ์๋ฅผ ์ ์ฉ ์์ผ์ผ ํ๋ ์์
์ด ํ์ํด์.
๊ธฐ๊น๋๋ ์ฌ๋๋ค์ Jenkins๋ฅผ ์ด์ฉํด์ Docker Registry์ Image๋ฅผ ๊ด๋ฆฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Jenkins์ SSL/TLS๋ฅผ ์ ์ฉ ์์ผ ๋ณด๋ ค๊ณ ํด์.
๊ทธ๋ฌ๊ธฐ ์ ์ Docker Host Server ์ฆ, SSL/TLS ์ธ์ฆ์๋ฅผ ๋ง๋ Server์์๋ Docker Registry๋ฅผ ์ด์ฉํ ์ ์๋๋ก ์ค์ ํด ๋ณผ๊ฒ์.
ํด๋น Server๋ ๊ฐ์ OS์ด๋ฉฐ, CentOS 7.9 ์
๋๋ค.
๋จผ์ ์ธ์ฆ์๋ฅผ ์์ ์์น๋ก ๋ณต์ฌ ๋ถํ๋ฃ๊ธฐ ํ์ฌ ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ์์ ๋ช
๋ น์ด๋ก ์ธ์ฆ์ ์ต์ ํ ํ์ฌ ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค Docker Deamon์ ์ฌ ๊ธฐ๋ ํ์ฌ ์ฃผ์์ด์.
์ด๋ฒ์๋ Jenkins์์ ์์
์ ํด ์ค๊ฒ์.
์ต์ด SCP(Secure Copy)๋ฅผ ์ด์ฉํ์ฌ Docker Registry Container์
๋ฃ์ด์ฃผ์๋ ์ธ์ฆ์๋ฅผ Jenkins์ ์ฎ๊ฒจ์ฃผ๋๋ก ํ ๊ฑฐ์์.
Jenkins ์ญ์ Docker Container๋ก ๊ธฐ๋ ์ค์ด๋ฉฐ,
OS ์ข
๋ฅ๋ ์์ ๊ฐ์ด Debian ๊ณ์ด์ด์์.
SCP๋ฅผ ์ด์ฉํด์ File์ ์ ์กํ๋ ค๋ฉด SSH Deamon์ด ๊ธฐ๋ ์ค์ด์ฌ์ผ ํด์.
Openssh Server๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ํด ํด๋น ์ค์น File์ ๋ด๋ ค ๋ฐ์ ๊ฑด๋ฐ, ๊ทธ ์ ์ apt๋ฅผ Update ํด ์ฃผ๋๋ก ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด openssh Package๋ฅผ ๋ด๋ ค ๋ฐ์ ์ค๊ฑฐ์์.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด ssh Deamon์ ๊ธฐ๋ ์์ผ ์ค๋๋ค.
22๋ฒ Port๋ฅผ ์ฌ์ฉํ๋ SSH๊ฐ Listen ์ํ ์ธ ๊ฒ์ ํ์ธํ ์ ์์ด์.
SSH, SCP ๋ฑ์ ํตํด ํด๋น Server์ ์ ์ํ๋ ค๋ฉด ์ ์ํ๊ณ ์ ํ๋ ๊ณ์ ์ ๋น๋ฐ๋ฒํธ๊ฐ ์ค์ ๋์ด ์์ด์ผ ํด์.
์ฃผ๋ํ๋์ ์์ ๊ฐ์ด Root ๊ณ์ ์ Password๋ฅผ ์ค์ ํด ์ฃผ์์ด์.
์์ ๊ฐ์ด scp ๋ช
๋ น์ด๋ฅผ ํตํด Directory ์์ฒด๋ฅผ ๋ด๋ ค ๋ฐ์ ์ฃผ์์ด์.
Debian ๊ณ์ด์ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์ธ์ฆ์๋ฅผ ๋ฑ๋กํด ์ฃผ์ด์ผ ํด์.
์์ ๊ฐ์ด ๋ฑ๋ก์ ํด ์ฃผ์๋ค๋ฉด Server ์ฌ ๊ธฐ๋์ ํด ์ค๋๋ค.
์์ ๋ช
๋ น์ด๋ฅผ ํตํด Docker Container๋ฅผ ์ฌ ๊ธฐ๋ ํ ์ ์์ด์.
๐ฝ ๊ฐ์ง๊ณ ๋๊ธฐ
๐ฆ Test
์ด์ ์ ๋๋์ง ํ๋ฒ ํ์ธํด ๋ณผ๊น์?
Test๋ Jenkins Docker๊ฐ ์๋ Docker Container Host Server์์ ์งํํ๋๋ก ํ ๊ฒ์ด์์.
์ต์ด Test๋ฅผ ์ํด hello-world Docker Image๋ฅผ ๋ฐ์ ์ฃผ์์ด์.
์์ ๊ฐ์ด Tag ์ ๋ณด๋ฅผ ๋จ๊ฒจ์ docker Image๋ฅผ ์๋ก ๋ง๋ค์ด ์ฃผ์์ด์.
์ค์ํ ๊ฑด Image ์ด๋ฆ์ Docker Registry ์ ๋ณด๊ฐ ๊ผญ ๋ค์ด๊ฐ์ผ ํ๋ค๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด Registry์ push ๋ช
๋ น์ด๋ฅผ ํตํด Image๋ฅผ ๋ฑ๋กํด ์ฃผ์์ด์.
์์ ๊ฐ์ด repositories์ registry-test Image๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Resistry Web Service๋ฅผ ๊ธฐ๋ํ์ฌ ๋ณด๋ค ํธํ๊ฒ ํ์ธํด ๋ณผ๊ฒ์.
hyper/docker-registry-web์ ๋ํ ์ค์ ์ ์ด ๊ณณ์์ ํ์ธํ ์ ์์ด์.
๊ธฐ๋์ ์ ๋์์ง๋ง, ์์ ๊ฐ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ด์.
๊ธฐ์กด์ ์ฃผ๋ํ๋์ Resistry์ Web Service๋ฅผ ์ฐ๊ฒฐํ ๋, yml File์ ์๋์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์์ด์.
์ฆ, ํ์ฌ๋ https SSL/TLS ๋ฐฉ์์ผ๋ก ํต์ ํ๊ธฐ ๋๋ฌธ์ http๋ก ์์ฒญ์ ๋ณด๋ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด ์์ ์ ํด์ฃผ๊ณ , Web ๊ด๋ จ Container๋ฅผ ์ฃฝ์๋ค๊ฐ ๋ค์ ๊ธฐ๋ ์์ผ ๋ณผ๊ฒ์.
docker run -it \
--ip 172.17.0.5 \
-d --restart=always \
-p 8081:8080 \
--name Giggal-people_DockerHub \
--link Giggal-people_Docker-Hub \
-v /opt/docker/config/docker_registry_config.yml:/conf/config.yml:ro \
hyper/docker-registry-web
์์ ๊ฐ์ด ๋ค์ ์ฌ๋ ค ์ฃผ์์ด์.
์์ ๊ฐ์ด curl์ ์ด์ฉํด์ HTTP Method Get์ผ๋ก ์ ๋ค์ด๊ฐ๋์ง ํ์ธํ๊ณ ์ ํ์์ผ๋,
์ธ์ฆ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
-v Option์ ์ถ๊ฐํ์ฌ ์์ธํ๊ฒ ๋ฌด์จ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๋ ค๊ณ ํ์ด์.
์ด ๋ฌธ์ ๋ ๋ฐ๊ธ์ ์ธ์ฆ์๊ฐ ์ ํจํ์ง ์๋ค๋ ๋ฌธ์ ์์.
์ฃผ๋ํ๋์ crt File์ ~/certificate/server.crt์ ์ ์ฅ์ ํด ์ฃผ์๋๋ฐ, ์์ curl์์ ๋ณด๋ฉด ํด๋น CA File์ /etc/pki/tls/certs/ca-bundle.crt๋ก ์ฐธ์กฐํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
์ต์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ์กด์ ์ ์ฅ๋์ด ์๋ ca-bundle.crt๋ฅผ ๋ฐ๋ก ์ ์ฅํด ๋๊ณ , ์ฃผ๋ํ๋์ด ๋ง๋ server.crt ๋ผ๋ File์ /etc/pki/tls/certs/ca-bundle.crt๋ก ๋ฎ์ด์ฐ๊ธฐ ํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ๋ค์ curl ๋ช
๋ น์ด๋ฅผ ์ํํ๋ ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฑธ ํ์ธํ ์ ์์์ด์.
๊ทธ๋ ๋ค๋ฉด ์์ ๊ฐ์ด Docker Registry์ ํต์ ํด์ผ ํ๋ ๋ชจ๋ Server๋ค์ ํด๋น ์์
์ด ํ์ํ๋ค๋ ๊ฑธ ๊นจ๋ฌ์์ด์.
๋จผ์ Docker Registry Web Server์์ ์์
์ ํด ๋ณผ๊ฒ์.
์ต์ด Bash Shell์ ์ด์ฉํ๊ฒ ๋ค๊ณ ์๋ ค์ฃผ๋ฉด์ ํด๋น Container์ ์ ์ํ์ฌ ์ค๊ฒ์.
curl์ด ์ค์น๋์ด ์์ง ์์ผ๋ฏ๋ก ์ค์น๋ฅผ ํด์ค๊ฒ์.
ํด๋น Container๋ Ubunt 14.04.5 LTS ์์ ๊ธฐ๋์ค์ด๋ ๊ทธ์ ๋ง๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํด์.
์ต์ด apt๋ฅผ ์ต์ ํ ํด์ค๊ฒ์.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด curl์ ๋ด๋ ค ๋ฐ์ ์ฃผ์์ด์.
์ญ์ ์์ ๊ฐ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์์ด์.
SCP ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด์ ์์์ ์ ์ฅํด๋ File์ ๋ฐ๋ก ๋ฐ์์ค๋๋ก ํ์ด์.
๊ทธ๋ฐ ๋ค์ ์์ ๋ช
๋ น์ด๋ก ์ธ์ฆ์๋ฅผ ์ต์ ํ ํด ์ฃผ์์ด์.
์ ์์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๋ง์ง๋ง์ผ๋ก Jenkins๋ ์์
ํด ์ค์ผ๊ฒ ์ด์.
์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์๋๊ฑธ ํ์ธํ ์ ์์ด์.
์์ ๊ฐ์ด crt File์ SCP๋ก ์ด์ฉํด์ ๋ด๋ ค ๋ฐ์ ๋ค ์ธ์ฆ์ ์ต์ ํ๋ฅผ ํด์ฃผ์์ด์.
๋์ Server๊ฐ ๊ฐ์ง ์ธ์ฆ์๋ฅผ ์ง์ Handlingํ๊ธฐ ์ํด ์์ ๊ฐ์ด ๋ด๋ ค ๋ฐ๊ธฐ๋ฅผ ํด ์ฃผ์์ด์.
pem File์ ์์ ํด์ผ ํ๋๋ฐ, ์์ ๊ฐ์ด ---BEGINS CERTIFICATE--- ๋ถํฐ ---END CERTIFICATE---- ๊น์ง๋ง ๋จ๊ธฐ๊ณ ๋ชจ๋ ์ง์์ฃผ์ธ์. ๋ง์ฝ ์ด ๋ด์ฉ์ด ๋ ๊ฐ๋ผ๋ฉด ๋งจ ์๋ ๋ถ๋ถ๋ง ๋จ๊ธฐ๊ณ , ๋ชจ๋ ์ง์์ค๋๋ค.
์์ ํ pem File์ cacert.crt๋ก ๋ณํํด์ ์ ์ฅํด ์ฃผ๊ณ , ์ธ์ฆ์ Update๋ฅผ ์งํํด ์ฃผ์์ด์.
root@319ae9040b13:/etc/ssl/certs# curl -v -X GET https://172.17.0.2:5000/v2/_catalogNote: Unnecessary use of -X or --request, GET is already inferred.
* Trying 172.17.0.2:5000...
* Connected to 172.17.0.2 (172.17.0.2) port 5000 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server accepted to use h2
* Server certificate:
* subject: C=KO; L=Default City; O=Giggal-people; CN=172.17.0.2; emailAddress=giggals.pepole@gmail.com
* start date: Nov 17 04:38:24 2022 GMT
* expire date: Nov 16 04:38:24 2025 GMT
* subjectAltName: host "172.17.0.2" matched cert's IP address!
* issuer: C=KO; L=Default City; O=Giggal-people; CN=172.17.0.2; emailAddress=giggals.pepole@gmail.com
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x5631f71f91e0)
> GET /v2/_catalog HTTP/2
> Host: 172.17.0.2:5000
> user-agent: curl/7.74.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 200
< content-type: application/json; charset=utf-8
< docker-distribution-api-version: registry/2.0
< x-content-type-options: nosniff
< content-length: 35
< date: Thu, 17 Nov 2022 10:19:53 GMT
<
{"repositories":["registry-test"]}
* Connection #0 to host 172.17.0.2 left intact
์์ ๊ฐ์ด ์ ์์ ์ผ๋ก Curl์ ํตํด ํต์ ์ด ๋ ๊ฒ์ ํ์ธํ์์ด์.
์ํ๊น๊ฒ๋ Web Registry๋ ์ฌ์ฉํ ์ ์์ ๊ฑฐ ๊ฐ์์.
์์์ ๋์ค๋ ๋ฌธ์ ๋ JAVA์์ SSL ํต์ ์ ํ์ง ๋ชปํ์ฌ ๋ฐ์ํ๋ Exception์ธ๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์์์ ๊ฐ์ด Server๋ด์์ ํ ์ ์๋ ๊ฒ๋ค์ ํด๋ณด์์ง๋ง, JAVA์์ TLS Version ๋ฑ์ ์ค์ ์ด ํ์ํ ๊ฑฐ ๊ฐ์์.
ํน์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์๋ ๋ถ์ด ๊ณ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค! ๐ซก
๐ง ์ฐธ๊ณ ์๋ฃ
'System ์์ ์ค > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] Bash Shell Script๋ฅผ ์ด์ฉํ Docker Backup (0) | 2023.06.14 |
---|---|
[Docker] Container ๋ค๋ฅธ System์ผ๋ก ์ฎ๊ธฐ๊ธฐ (0) | 2023.06.14 |
[DevOps - CentOS 7.9] Docker Local Registry ์ฌ์ฉ๋ฒ (0) | 2022.11.16 |
[DevOps - CentOS 7.9] Docker Local Registry (๊ฐ์ธ Docker Hub) ๊ตฌ์ถํ๊ธฐ (0) | 2022.11.16 |
[DevOps] NGINX๋? (0) | 2022.10.07 |