docker push
다음의 명령어들은 Docker 이미지를 Docker Hub 또는 다른 Docker 레지스트리로 푸시(push)하는 과정을 나타낸다.
docker login:
Docker Hub 또는 다른 Docker 레지스트리에 로그인
이 명령을 실행하면 Docker 계정 정보를 입력하라는 프롬프트가 나타남
cd /home/ubuntu/dockertest/:
이미지를 푸시할 디렉터리로 이동
docker images:
현재 시스템에 있는 Docker 이미지 목록을 표시합니다.
docker tag nodejs:1.0 cloudwoong/nodejs-test:1.0:
"nodejs:1.0" 이미지를 "cloudwoong/nodejs-test:1.0"으로 태그
태그는 이미지를 식별하는 데 사용되며, 이미지를 푸시할 때 필요
docker push cloudwoong/nodejs-test:1.0:
"cloudwoong/nodejs-test:1.0" 이미지를 Docker Hub 또는 기타 Docker 레지스트리로 푸시함
이렇게 하면 해당 이미지가 원격 레지스트리에 업로드되고 다른 사용자가 해당 이미지를 다운로드할 수 있게 됨
따라서 위 명령어는 "nodejs:1.0" 이미지를 "cloudwoong/nodejs-test:1.0" 태그로 푸시하여 Docker Hub나 다른 레지스트리에 해당 이미지를 업로드하고 공유할 수 있게 함
docker commit
docker run -itd --name ubuntu ubuntu:focal:
"ubuntu:focal" 이미지를 기반으로 "ubuntu"라는 이름의 Docker 컨테이너를 실행
-itd 옵션은 컨테이너를 대화형 모드로 실행하고 백그라운드에서 실행
--name ubuntu 옵션은 컨테이너에 "ubuntu"라는 이름을 부여
docker exec -it ubuntu bash:
"ubuntu" 컨테이너에 대화형 Bash 셸로 들어감
이 명령을 통해 컨테이너 내부에서 명령을 실행
touch test.txt:
"ubuntu" 컨테이너 내에서 "test.txt"라는 빈 파일을 생성
docker commit -a woong -m "add file" ubuntu ubuntu:1.0:
"ubuntu" 컨테이너의 변경 내용을 적용한 새로운 이미지를 생성
-a woong 옵션은 커밋 작성자를 "woong"으로 지정
-m "add file" 옵션은 커밋 메시지를 "add file"로 지정
ubuntu:1.0은 새로운 이미지의 이름과 태그를 지정
docker run -itd --name my_ubuntu ubuntu:1.0:
"ubuntu:1.0" 이미지를 기반으로 "my_ubuntu"라는 이름의 Docker 컨테이너를 실행
docker ps -a:
현재 실행 중인 모든 Docker 컨테이너와 이전에 실행한 컨테이너의 목록을 표시
docker exec -it my_ubuntu bash:
"my_ubuntu" 컨테이너에 대화형 Bash 셸로 들어감
컨테이너를 생성하고 관리하는 명령어들로, 특히 docker run, docker exec, docker commit 명령어들을 사용하여 컨테이너를 생성하고 변경사항을 이미지로 저장하며, 컨테이너 내부에서 작업을 수행할 수 있습니다
호스트와 컨테이너 간의 포트 매핑을 설정하여 서버에 접근
docker file
FROM node:16
LABEL maintainer="kgitbank song <kgitbank@kgitbank.com>"
LABEL description="Simple server with Node.js"
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
ubuntu@ubuntu:~/dockertest/nodejs-server$ docker run -it -p 8080:8080 --name nodejs-server nodejs-server
Running on http://0.0.0.0:8080
ubuntu@ubuntu:~/dockertest/nodejs-server$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d3b9d71f830 nodejs-server "docker-entrypoint.s…" 4 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp nodejs-server
41ee3aba0ed2 ubuntu:focal "/bin/bash" 27 minutes ago Up 27 minutes ubuntu
ubuntu@ubuntu:~/dockertest/nodejs-server$ curl localhost:8080
Hello Worldubuntu@ubuntu:~/dockertest/nodejs-server$
docker run -it -p 8080:8080 --name nodejs-server nodejs-server:
docker run: Docker 컨테이너를 실행하는 명령어
-it: 이 옵션은 컨테이너를 대화형(interactive) 모드로 실행하고, 터미널을 사용할 수 있도록 함
-p 8080:8080: 호스트의 8080 포트와 컨테이너의 8080 포트를 매핑
이렇게 하면 호스트에서 8080 포트로 들어오는 요청이 컨테이너의 8080 포트로 전달
--name nodejs-server: 컨테이너에 "nodejs-server"라는 이름을 부여
nodejs-server: 실행할 Docker 이미지의 이름입니다. "nodejs-server" 이미지를 실행
실행 결과:
Running on http://0.0.0.0:8080: Node.js 서버가 0.0.0.0 주소와 8080 포트에서 실행되고 있음을 나타냄
이 서버는 모든 IP 주소(0.0.0.0)에서 요청을 수락할 수 있도록 설정
docker ps:
docker ps 명령어는 현재 실행 중인 Docker 컨테이너의 목록을 표시
CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS, NAMES 등의 정보가 표시
curl localhost:8080:
curl 명령어를 사용하여 현재 호스트에서 동일한 호스트의 8080 포트로 HTTP GET 요청을 보냄
결과로 "Hello World"와 "ubuntu" 문자열이 반환된다.
"Hello World"는 Node.js 서버가 반환한 메시지이고, "ubuntu"는 이전에 실행한 컨테이너의 이름
코드는 Docker를 사용하여 Node.js 애플리케이션을 실행하고 호스트와 컨테이너 간의 포트 매핑을 설정하여 서버에 접근하고 결과를 확인하는 과정을 나타내다.
save& load
image가 너무 많아지면 압축을 해놨다가 써야 될 때가 있다.
nodejs를 지정해서 압축해 보겠다.
ubuntu@ubuntu:~/dockertest/nodejs-server$ sudo docker save -o test_images.tar nodejs:1.0
ubuntu@ubuntu:~/dockertest/nodejs-server$ docker rmi -f nodejs:1.0
압축 이름을 지정하고, 압축된 후 개개의 이미지는 삭제해 준다. 그 결과 nodejs가 안 보이는 것을 알 수 있다.
ubuntu@ubuntu:~/dockertest/nodejs-server$ sudo docker load -i test_images.tar
다시 로드를 해주고 확인해 보면
다시 잘 나타난 것을 볼 수 있다. 때에 따라 압축하고, 로드해서 현명하게 쓰길 바란다.