얼마 전 이해하기 쉽고, 재미있고, 가장 중요한 것은 딕 다이어그램이 많은 AI 학습 웹사이트를 발견했는데, 여러분과 공유하지 않을 수 없었습니다.
Ubuntu 20.04에서 Docker 설치 및 사용 방법
소개
Docker이 옵션은 애플리케이션 중간 프로세스를 관리하는 프로세스를 간소화하는 애플리케이션입니다. 컨테이너를 사용하면 리소스가 격리된 프로세스에서 애플리케이션을 실행할 수 있습니다. 가상 머신과 비슷하지만 컨테이너는 이식성이 뛰어나고 리소스 친화적이며 호스트 운영 체제에 더 많이 의존합니다.
다음 단계는 Ubuntu 20.04에 Docker 커뮤니티 에디션을 설치하여 사용하는 것입니다. Docker 자체가 설치되고 컨테이너와 이미지가 사용되며 이미지가 Docker 리포지토리로 푸시됩니다.
주로 짧은 스케치로 구성된 문학의 한 유형입니다.
이번 포스팅에서는 우분투 서버에 도커를 설치하는 방법을 안내해 드리니, 클릭 한 번으로 도커 앱을 라이브 서버에 배포하고 싶다면 다음 포스팅을 기대해주세요~!
전제 조건
다음 항목이 필요합니다:
- 우분투 20.04 초기 서버 설정 가이드에 따라 sudo 비루트 사용자 및 방화벽을 포함하여 우분투 20.04 서버를 설정하세요.
1단계 - Docker 설치
공식 Ubuntu 리포지토리에서 제공되는 Docker 설치 패키지는 최신 버전이 아닐 수 있습니다. 최신 버전을 받으려면 공식 Docker 리포지토리에서 Docker를 설치해야 합니다. 이렇게 하려면 새 패키지 소스를 추가하고, 다운로드가 유효한지 확인하기 위해 Docker에서 GPG 키를 추가한 다음 패키지를 설치합니다.
먼저 기존 패키지 목록을 업데이트합니다:
sudo apt update
그런 다음, apt가 HTTPS를 통해 패키지를 사용할 수 있도록 몇 가지 필수 패키지를 설치합니다:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
그런 다음 공식 Docker 리포지토리에 대한 GPG 키를 시스템에 추가합니다:
curl -fsSL https://..com/linux/ubuntu/gpg | sudo apt-key add -
APT 소스에 Docker 리포지토리를 추가합니다:
sudo add-apt-repository "deb [arch=amd64] https://..com/linux/ubuntu focal stable"
이렇게 하면 새로 추가된 리포지토리의 Docker 패키지로 패키지 데이터베이스도 업데이트됩니다.
기본 Ubuntu 리포지토리가 아닌 Docker 리포지토리에서 설치해야 합니다:
apt-cache policy docker-ce
Docker의 버전 번호는 다를 수 있지만 다음과 같은 출력이 표시됩니다:
apt-cache 정책 docker-ce의 출력
docker-ce:
Installed: (none)
Candidate: 5:~3-0~ubuntu-focal
Version table:
5:~3-0~ubuntu-focal 500
500 https://..com/linux/ubuntu focal/stable amd64 Packages
docker-ce는 아직 설치되어 있지 않지만 설치 후보로는 Ubuntu 20.04(초점)의 Docker 리포지토리가 있습니다.
마지막으로 Docker를 설치합니다:
sudo apt install docker-ce
이제 Docker가 설치되고, 데몬이 시작되었으며, 부팅 시 프로세스를 시작할 수 있어야 합니다. 실행 중인지 확인합니다:
sudo systemctl status docker
출력은 다음과 비슷해야 하며, 서비스가 활성화되어 실행 중임을 나타냅니다:
Output● 도커.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● 도커.socket
Docs: https://..com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
이제 도커를 설치하면 도커 서비스뿐만 아니라 도커 명령줄 유틸리티 또는 도커 클라이언트도 제공됩니다. 이 도커 명령어를 사용하는 방법은 이 튜토리얼의 뒷부분에서 살펴보겠습니다.
단계 - Sudo 없이 Docker 명령 실행하기
기본적으로 이 명령은 루트 사용자 또는 Docker 설치 시 자동으로 생성된 ****docker 그룹의 사용자 docker만 실행할 수 있습니다. 접두사 없이 명령을 실행하려고 하면 다음과 같은 출력이 표시됩니다: docker ``sudo
Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
도커 명령을 실행할 때 sudo로 내용을 입력하는 것을 방지하려면 사용자 이름을 도커 그룹에 추가하세요:
sudo usermod -aG docker ${USER}
새 그룹 멤버십을 적용하려면 서버에서 로그아웃했다가 다시 로그인하거나 다음을 입력합니다:
su - ${USER}
계속하려면 사용자 비밀번호를 입력하라는 메시지가 표시됩니다.
다음을 입력하여 사용자가 이제 도커 그룹에 추가되었는지 확인합니다:
groups
Outputsammy sudo docker
로그인하지 않은 그룹에 사용자를 추가해야 하는 경우 다음을 사용하여 사용자 아이디를 명시적으로 선언하세요:
sudo usermod -aG docker username
이 글의 나머지 부분에서는 dockerdocker 그룹의 사용자로 명령을 실행한다고 가정합니다. 그렇지 않은 경우 명령 앞에 sudo`를 추가하세요.
3단계 - Docker 명령 사용
도커를 사용하려면 일련의 옵션과 명령을 인자와 함께 전달하면 됩니다. 구문은 다음과 같은 형태를 취합니다:
docker [option] [command] [arguments]
사용 가능한 모든 하위 명령을 보려면 입력하세요:
docker
Docker 19부터 사용 가능한 하위 명령의 전체 목록은 다음과 같습니다:
Output attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
특정 명령에 사용할 수 있는 옵션을 보려면 입력합니다:
docker docker-subcommand --help
Docker에 대한 시스템 전체 정보를 보려면 다음을 사용하세요:
docker info
4단계 - Docker 이미지 사용
Docker 컨테이너는 Docker 이미지로 빌드됩니다. 기본적으로 Docker는 Docker 프로젝트의 배후 회사인 Docker에서 관리하는 Docker 레지스트리인 Docker Hub에서 이러한 이미지를 가져옵니다. 누구나 Docker Hub에서 Docker 이미지를 호스팅할 수 있으므로, 이를 필요로 하는 대부분의 애플리케이션 및 Linux 배포판은 여기에서 이미지를 호스팅합니다.
도커 허브에서 이미지에 액세스하고 다운로드할 수 있는지 확인하려면 다음과 같이 입력합니다:
docker run hello-world
출력은 Docker가 제대로 작동하고 있음을 나타냅니다:
OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Docker는 처음에 로컬에서 hello-worldImage를 찾을 수 없으므로 Docker Hub에서 이미지를 다운로드하고, 이미지를 다운로드한 후 이미지에서 컨테이너를 생성하고 컨테이너 내에서 애플리케이션을 실행하고 메시지를 표시합니다.
하위 명령 docker를 사용한 검색 명령은 Docker Hub에서 사용 가능한 이미지를 검색하는 데 사용할 수 있습니다. 예를 들어 Ubuntu 이미지를 검색하려면 다음과 같이 입력합니다:
docker search ubuntu
이 스크립트는 Docker Hub를 크롤링하여 검색 문자열과 이름이 일치하는 모든 이미지의 목록을 반환합니다. 이 경우 출력은 다음과 비슷하게 표시됩니다:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys... 10908[OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface ... 428[OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi... 244[OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session... 218[OK]
ubuntu-upstart Upstart is an event-based replacement for th... 108[OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with
...
사용하려는 이미지를 식별한 후에는 pull 하위 명령을 사용하여 컴퓨터에 다운로드할 수 있습니다.
다음 명령을 실행하여 공식 ubuntuImage를 컴퓨터에 다운로드합니다:
docker pull ubuntu
다음과 같은 출력이 표시됩니다:
OutputUsing default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
이미지를 다운로드한 후, 실행 서브커맨드와 함께 다운로드한 이미지를 사용하여 컨테이너를 실행할 수 있습니다. 위와 같이 하위 명령어를 사용하여 hello-world를 실행할 때 이미지가 아직 다운로드되지 않은 경우, Docker 클라이언트는 먼저 이미지를 다운로드한 다음 컨테이너를 실행합니다.
컴퓨터에 다운로드한 이미지를 보려면 입력합니다:
docker images
출력은 다음과 비슷합니다:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB
컨테이너 실행에 사용된 이미지는 수정하여 새 이미지를 생성하는 데 사용할 수 있으며, 이 이미지는 Docker Hub 또는 다른 Docker 레지스트리에 업로드할 수 있습니다. *
단계 - Docker 컨테이너 실행
이전 단계에서 실행한 헬로월드 컨테이너는 테스트 메시지가 발행된 후 실행되고 종료되는 컨테이너의 예입니다.
예를 들어, 컨테이너는 최신 Ubuntu 이미지로 실행할 수 있습니다:
docker run -it ubuntu
명령 프롬프트는 이제 컨테이너 내에서 작업하고 있다는 사실을 반영하도록 변경되어야 하며 다음과 같은 형식이어야 합니다:
Outputroot@d9b100f2f636:/#
이 글의 명령 프롬프트에서 컨테이너 ID는 d9b100f2f636입니다. 나중에 컨테이너를 삭제하려는 경우 컨테이너를 식별하기 위해 D가 필요합니다.
컨테이너 내에서 모든 명령을 실행할 수 있습니다. 예를 들어 컨테이너 내에서 패키지 데이터베이스를 업데이트할 수 있습니다:
apt update
그런 다음 그 안에 애플리케이션을 설치합니다. 예를 들어 Node.js를 설치합니다:
apt install nodejs
이렇게 하면 공식 Ubuntu 리포지토리에서 Node.js가 컨테이너에 설치됩니다. 설치가 완료되면 Node.js가 설치되었는지 확인합니다:
node -v
를 누르면 터미널에 버전 번호가 표시됩니다:
Outputv
컨테이너 내에서 변경한 내용은 해당 컨테이너에만 적용됩니다.
컨테이너를 종료하려면 exit를 입력합니다.
단계 - Docker 컨테이너 관리하기
한동안 Docker를 사용하다 보면 컴퓨터에 활성 및 비활성 컨테이너가 많이 생깁니다. 활성 컨테이너를 보려면
docker ps
를 입력하면 다음과 유사한 출력이 표시됩니다:
OutputCONTAINER ID IMAGE COMMAND CREATED
이 튜토리얼에서는 헬로월드이미지와 우분투이미지 두 개의 컨테이너가 시작됩니다. 두 컨테이너는 더 이상 실행되지 않지만 시스템에 여전히 존재합니다.
모든 컨테이너를 보려면 docker ps -a 사용하세요:
docker ps -a
를 입력하면 이와 유사한 출력이 표시됩니다:
1c08a7a0d0e4 ubuntu "/bin/bash" 2 minutes ago Exited (0) 8 seconds ago quizzical_mcnulty
a707221a5f6c hello-world "/hello" 6 minutes ago Exited (0) 6 minutes ago youthful_curie
최근에 생성된 컨테이너를 보려면 다음과 같이 하세요:
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "/bin/bash" 2 minutes ago Exited (0) 40 seconds ago quizzical_mcnulty
중지된 컨테이너를 시작하려면 docker start 뒤에 컨테이너 ID 또는 컨테이너 이름을 입력합니다:
docker start 1c08a7a0d0e4
컨테이너가 시작되고 다음 docker ps 명령을 사용하여 컨테이너의 상태를 확인할 수 있습니다:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "/bin/bash" 3 minutes ago Up 5 seconds quizzical_mcnulty
실행 중인 컨테이너를 중지하려면 docker stop 뒤에 컨테이너 ID 또는 이름을 입력합니다.
docker stop quizzical_mcnulty
컨테이너가 더 이상 필요하지 않다고 판단되면 컨테이너 ID 또는 이름을 다시 사용하여 삭제 명령어 docker rm 사용합니다.
docker rm youthful_curie
단계 - 컨테이너의 변경 사항을 Docker 이미지에 커밋하기
Docker 이미지를 시작할 때 가상 머신을 사용하는 것처럼 파일을 생성, 수정 및 삭제할 수 있습니다. 변경한 내용은 해당 컨테이너에만 적용됩니다. 시작 및 중지는 가능하지만, docker rm 명령을 사용하여 한 번 변경한 내용은 영구적으로 손실됩니다.
다음 섹션에서는 컨테이너의 상태를 새 Docker 이미지로 저장하는 방법을 설명합니다.
Ubuntu 컨테이너에 Node.js를 설치하면 이제 이미지를 만드는 데 사용한 이미지와 다른 이미지를 실행하는 컨테이너가 생겼습니다. 하지만 나중에 이 Node.js 컨테이너를 새 이미지의 기초로 재사용할 수 있습니다.
그런 다음 다음 명령을 사용하여 새 Docker 이미지 인스턴스에 변경 사항을 커밋합니다.
docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
-m은 사용자 및 다른 사람들이 변경 내용을 이해할 수 있도록 메시지를 커밋하는 데 사용되며, -a는 작성자를 지정하는 데 사용됩니다. container_id는 이 튜토리얼의 앞부분에서 대화형 Docker 세션을 시작할 때 언급했던 것입니다. Docker Hub에 다른 리포지토리를 만들지 않았다면 리포지토리는 일반적으로 Docker Hub 사용자 이름입니다.
예를 들어 컨테이너 ID가 d9b100f2f636인 사용자 sammy의 경우 명령은 다음과 같습니다:
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
이미지화하면 새 이미지가 컴퓨터에 로컬로 저장됩니다.
Docker 이미지를 다시 나열하면 새 이미지와 그 이미지의 파생된 이전 이미지가 표시됩니다:
docker images
다음과 같은 출력이 표시됩니다:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
이 예제에서 ubuntu-nodejs는 ubuntuDocker Hub의 기존 이미지에서 파생된 새 이미지이며, 크기 차이는 변경 사항을 반영합니다. 이 예제에서 유일한 변경 사항은 NodeJS가 설치되었다는 것입니다. 따라서 다음에 NodeJS가 사전 설치된 Ubuntu로 컨테이너를 실행해야 할 때는 새 이미지를 사용하면 됩니다.
또한 도커파일에서 이미지를 빌드하여 새 이미지에 소프트웨어를 자동으로 설치할 수 있습니다.
단계 - 도커 이미지를 도커 리포지토리로 푸시하기
이미지를 Docker Hub 또는 다른 Docker 레지스트리로 푸시하려면 계정이 있어야 합니다.
이미지를 푸시하려면 먼저 Docker Hub에 로그인합니다.
docker login -u docker-registry-username
Docker Hub 비밀번호로 인증하라는 메시지가 표시됩니다. 올바른 비밀번호를 지정하면 인증에 성공합니다.
**참고: Docker 레지스트리 사용자 이름이 이미지 생성에 사용된 로컬 사용자 이름과 다른 경우 레지스트리 사용자 이름을 사용하여 이미지에 태그를 지정해야 하며, 마지막 단계에 제공된 예제의 경우 입력할 수 있습니다:
docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
그런 다음 다음을 사용하여 나만의 이미지를 푸시할 수 있습니다:
docker push docker-registry-username/docker-image-name
이미지 푸시 ubuntu-nodejs를 새미 리포지토리로 보내려면 다음과 같이 명령합니다:
docker push sammy/ubuntu-nodejs
이미지를 업로드할 때 이 과정을 완료하는 데 시간이 다소 걸릴 수 있지만 완료되면 출력은 다음과 같이 표시됩니다:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...
이미지를 레지스트리에 푸시하면 아래와 같이 계정의 대시보드에 이미지가 나열됩니다.
로그인하지 않은 경우 푸시를 시도하면 이러한 유형의 오류가 발생합니다:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
docker login 푸시 시도를 반복합니다. 그런 다음 Docker Hub 리포지토리 페이지에 있는지 확인합니다.





