Docker 소개 및 입문
16133 단어 ubuntudockerfilelinuxdocker
발단
몇 달 전 Docker 에 대해 들 었 지만 연구 할 시간 이 없 었 습 니 다. 얼마 전 azure 를 이용 해 무료 로 사용 해 보 았 습 니 다. 서둘러 실험 해 보 았 습 니 다. 하지만 ubuntu 기초 미 러 다운로드 에 걸 려 (국내 네트워크 의 특별한 이유 로) 좌초 되 었 습 니 다.구경 Segmentfault 을 하 다가 위 에 Docker 서브 스테이션 문답 이 있 는 것 을 보 았 습 니 다. 구경 을 했 는데 과연 건어물 이 있 었 습 니 다. 그래서 다시 시도 해 보 았 습 니 다. 여기 서 경험 과 체험 을 공유 해 보 겠 습 니 다.
Docker 소개
나 는 간단하게 말 하면 Docker 은 응용 프로그램 이 용 기 를 실행 하 는 것 이 고 가상 컴퓨터 와 유사 한 개념 이 라 고 생각한다.그러나 가상 화 기술 과 다른 점 은 다음 과 같다.
Docker 의 주요 특성 은 다음 과 같 습 니 다 Docker: 일치 성 을 갖 춘 자동화 소프트웨어 배치.
Docker 의 사용 입문
Docker 공식 설치 지도 상세 합 니 다. 하지만 국내의 특수 한 상황 으로 인해 저 는 이 설치 지 도 를 바탕 으로 국내 개발 자 에 게 적용 되 는 입문 과정 을 제시 합 니 다.
Ubuntu Precise 12.04 (LTS) (64-bit)
을 바탕 으로 이 버 전 을 추천 합 니 다. 다른 버 전 은 공식 설치 매 뉴 얼 을 참고 합 니 다.Docker 설치
우선 Docker 는 공식 적 으로 리 눅 스 커 널 3.8 이상 을 실행 하 는 것 이 좋 겠 다 고 밝 혔 기 때문에 커 널 업그레이드 부터 해 야 한다.
# install the backported kernel
sudo apt-get update
sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
# reboot
sudo reboot
Docker 창고 의 key 추가:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
미 러 를 추가 합 니 다. 여 기 는 러시아 Yandex 를 직접 사용 합 니 다.
sudo sh -c "echo deb http://mirror.yandex.ru/mirrors/docker/ docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
Docker 설치
sudo apt-get install lxc-docker
일반적으로 위의 절 차 는 아무런 문제 가 없 을 것 이다.
Docker 미 러 다운로드
Docker 가 실행 하려 면 최소한 ubuntu 의 기본 미 러 가 필요 합 니 다. 이 미 러 는 처음 실행 할 때 자동 으로 다운로드 되 지만 국내 에서 직접 사용 하려 면 기본 적 으로 는 생각 하지 마 세 요. 대 리 를 사용 해 야 합 니 다. 여 기 는 Docker 중국어 커 뮤 니 티 에서 제공 하 는 대 리 를 사용 합 니 다. 출처, 출처.
파일 수정
/etc/default/docker
, 주석 취소 http_proxy
부분:# If you need Docker to use an HTTP proxy, it can also be specified here.
export http_proxy=http://192.241.209.203:8384/
필자 의 테스트 를 통 해 위의 이 대리 도 안정 적 이지 않 고 사용 하 는 사람 이 비교적 많 을 것 이다.
사용 가능 한 프 록 시 주소 (지속 적 인 관심 중)
http://192.241.209.203:8384
그리고 다음 명령 을 실행 할 수 있 습 니 다. 테스트 가 실 행 됩 니 다. 에이전트 가 안정 적 이지 않 기 때문에 몇 번 더 시도 해 야 할 수도 있 습 니 다 (침착).
sudo docker run -i -t ubuntu /bin/bash
다음 캡 처 는 제 가 pull 완성 에 성 공 했 고 hello World 성공 테스트 (약 3 - 4 번 시도) 입 니 다.
Docker 의 커 뮤 니 티 와 생태
창고 와 미 러
오픈 소스 기술 을 평가 하려 면 커 뮤 니 티 와 생태 에 관심 을 가 져 야 합 니 다. Docker 의 생태 는 특정한 '미 러 (image) 가방' 을 푸 시 하고 끌 어 당 겨 서 펼 쳐 집 니 다. docker index 에서 필요 한 미 러 를 검색 할 수 있 습 니 다. 아래 명령 을 통 해 검색 할 수도 있 습 니 다.
sudo docker search
미 러 는 일부 소프트웨어 를 포함 하 는 용기 시스템 으로 볼 수 있 습 니 다. 예 를 들 어 ubuntu 는 공식 적 인 기본 미 러 입 니 다. 많은 미 러 는 이 미 러 의 '파생' 을 바탕 으로 합 니 다. 이 미 러 는 기본 적 인 ubuntu 시스템 을 포함 하고 있 습 니 다. 예 를 들 어 hipache 은 공식 적 인 미 러 용기 로 실행 후 http 와 websocket 의 대리 서 비 스 를 지원 할 수 있 습 니 다. 이 미 러 자 체 는 그 자체 에 기반 을 두 고 있 습 니 다.ubuntu 。
pull
를 통 해 미 러 를 끌 어 내 고 미 러 를 로 컬 에 다운로드 합 니 다. 예 를 들 어sudo docker pull hipache
images
을 통 해 현재 어떤 미 러 가 있 는 지 확인 합 니 다.sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 9f676bd305a4 6 weeks ago 178 MB
ubuntu saucy 9f676bd305a4 6 weeks ago 178 MB
ubuntu 13.04 eb601b8965b8 6 weeks ago 166.5 MB
ubuntu raring eb601b8965b8 6 weeks ago 166.5 MB
ubuntu 12.10 5ac751e8d623 6 weeks ago 161 MB
ubuntu quantal 5ac751e8d623 6 weeks ago 161 MB
ubuntu 10.04 9cc9ea5ea540 6 weeks ago 180.8 MB
ubuntu lucid 9cc9ea5ea540 6 weeks ago 180.8 MB
ubuntu 12.04 9cd978db300e 6 weeks ago 204.4 MB
ubuntu latest 9cd978db300e 6 weeks ago 204.4 MB
ubuntu precise 9cd978db300e 6 weeks ago 204.4 MB
위 에 있 는 것 은 모두 미 러 입 니 다. 모두 ubuntu 창고 (일반 창고 명 은
username/repository
형식 일 것 입 니 다. repository
를 창고 명 으로 한다 면 공식 적 으로 발 표 된 창 고 를 말 합 니 다. 우리 가 ubuntu 를 끌 어 올 렸 을 때 사실은 창고 안의 미 러 를 모두 끌 어 내 렸 습 니 다. 미 러 마다 유일한 IMAGE ID
과 기억 하기 쉬 운 TAG
이 있 습 니 다.IMAGE ID
의 앞 자리 나 repository:TAG
를 통 해 미 러 를 표시 할 수 있 습 니 다.Dockerfile 과 Dockerfile 을 통 해 Nginx 용 기 를 구축 합 니 다.
pull 을 제외 하고 미 러 도 '컴 파일' 을 통 해 얻 을 수 있 습 니 다. 여기 있 는 '컴 파일' 입 니 다.수 동 으로 작성 하거나 github 에서 Dockerfile 을 가 져 와 서 미 러 를 만 드 는 빌 드 동작 을 말 합 니 다. Dockerfile 을 스 크 립 트 로 볼 수 있 습 니 다. 이 스 크 립 트 는 용기 가 시 작 될 때마다 실 행 됩 니 다. 일반적으로 Dockerfile 에 서 는 기본 소프트웨어 의 설치 스 크 립 트 와 설정 스 크 립 트 를 작성 해 야 합 니 다. 다음 Dockerfile 은 예 입 니 다.
#
# Ubuntu Dockerfile
#
# https://github.com/dockerfile/ubuntu
#
# Pull base image.
FROM ubuntu:12.10
# Update OS.
RUN echo "deb http://archive.ubuntu.com/ubuntu quantal main universe multiverse" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get upgrade -y
# Install basic packages.
RUN apt-get install -y software-properties-common
RUN apt-get install -y curl git htop unzip vim wget
# Add files.
ADD root/.bashrc /root/.bashrc
ADD root/.gitconfig /root/.gitconfig
ADD root/scripts /root/scripts
# Set working directory.
ENV HOME /root
WORKDIR /root
FROM
명령 어 는 이번 구축 에 ubuntu 창 고 를 기반 으로 한 12.10 TAG 미 러 가 필요 합 니 다. 로 컬 에 이 미 러 가 존재 하지 않 으 면 자동 으로 미 러 를 다운로드 합 니 다. 미 러 는 실제로 컴 파일 된 결과 입 니 다. 위 에 있 는 Dockerfile 은 원본 ubuntu 를 바탕 으로 자주 사용 되 는 소프트웨어 를 많이 설치 하 였 습 니 다.docker 공식 유 Dockerfile 튜 토리 얼
실천 하 다.
우선 위의 설치 절 차 를 마 쳤 는 지 확인 하고 기본 미 러 ubuntu: 12.10 을 끌 어 옵 니 다.
현재 우 리 는 위의 Dockerfile 로 이 창 고 를 구축 합 니 다. (위의 Dockerfile 은 실제 github dockerfile 프로젝트 의 기본 창고 dockerfile/ubuntu 이 고 아래 명령 은 github 에서 Dockerfile 을 다운로드 하여 구축 합 니 다)
sudo docker build -t="dockerfile/ubuntu" github.com/dockerfile/ubuntu
다음은 마지막 구축 에 성 공 했 을 때의 출력 입 니 다.
...
Processing triggers for ureadahead ...
---> 0a4392cf8e2d
Step 6 : ADD root/.bashrc /root/.bashrc
---> b0e86f348c09
Step 7 : ADD root/.gitconfig /root/.gitconfig
---> e2a9c001d457
Step 8 : ADD root/scripts /root/scripts
---> 678febabdbdc
Step 9 : ENV HOME /root
---> Running in c4afef311cf1
---> eaa3ae3277a8
Step 10 : WORKDIR /root
---> Running in d50c273c75b8
---> c9ecf5bc3227
Successfully built c9ecf5bc3227
Removing intermediate container 1a3d1f794c49
Removing intermediate container 9f72df8abb63
Removing intermediate container 5694d1e3e77e
Removing intermediate container 6a184821f89c
Removing intermediate container 8195bd05fc36
Removing intermediate container d50c273c75b8
Removing intermediate container 70de07353ecf
Removing intermediate container 73e3f6204613
Removing intermediate container 5dd948415981
Removing intermediate container c4afef311cf1
이 때 창고 가 하나 더 나 옵 니 다:
sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
dockerfile/ubuntu latest c9ecf5bc3227 About a minute ago 294.2 MB
...
이제 우 리 는 dockerfile/nginx 을 구축 할 수 있다. (물론 처음부터 이 미 러 를 직접
pull
sudo docker build -t="dockerfile/nginx" github.com/dockerfile/nginx
완 료 된 후에 컴 파일 된 미 러 를 볼 수 있 습 니 다:
sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
dockerfile/nginx latest 68508350c656 About a minute ago 308.3 MB
dockerfile/ubuntu latest c9ecf5bc3227 16 minutes ago 294.2 MB
...
이제 진짜 효 과 를 볼 때 가 되 었 습 니 다! 다음 명령 으로 용 기 를 실행 하 십시오:
sudo docker run -d -p 80:80 dockerfile/nginx
이 명령 은 daemon 방식 으로 용 기 를 실행 합 니 다. 다음 명령 을 통 해 실행 중인 용 기 를 봅 니 다.
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98c474a7dd6a dockerfile/nginx:latest nginx 6 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp trusting_hawking
호스트 의 80 포트 를 방문 하면 nginx 의 환영 페이지 를 볼 수 있 습 니 다. 이 때 이 컴퓨터 의 프로 세 스
sudo ps -ef
를 살 펴 보 겠 습 니 다.root 1428 952 0 15:19 ? 00:00:00 nginx: master process nginx
root 1429 417 0 15:19 ? 00:00:00 /sbin/udevd --daemon
www-data 1441 1428 0 15:19 ? 00:00:00 nginx: worker process
www-data 1442 1428 0 15:19 ? 00:00:00 nginx: worker process
www-data 1443 1428 0 15:19 ? 00:00:00 nginx: worker process
www-data 1444 1428 0 15:19 ? 00:00:00 nginx: worker process
사물 의 본질 에 가 까 운 것 같 습 니 다. nginx 의 프로 세 스 는 실제 적 으로 이 컴퓨터 에 있 습 니 다. 이 는 용기 에서 프로그램의 실행 은 여전히 이 컴퓨터 운영 체 제 를 사용 하고 있 습 니 다. 용 기 는 스스로 운영 체 제 를 구축 하지 않 고 특정한 격 리 방식 으로 이 컴퓨터 운영 체제 에 의존 하 는 것 을 의미 합 니 다. 이것 이 바로 Docker 와 가상 컴퓨터 의 본질 적 인 차이 입 니 다.
아래 와 같이 이 컴퓨터 의 디 렉 터 리 를 "nginx 용기" 에 표시 할 수 있 습 니 다.
디 렉 터 리 에 nginx 설정 파일 세 션 이 있어 야 합 니 다.docker run -d -p 80:80 -v :/etc/nginx/sites-enabled -v :/var/log/nginx dockerfile/nginx
PS: 이 단 계 는 필자 가 성공 하지 못 했 습 니 다. 로그 경 로 는 map 할 수 있 지만 sites - enable - dir 의 설정 은 항상 안 됩 니 다. 계속 진단 중 입 니 다.
미 러 공유 와 Dockfile 배포
미 러 와 빌 드 할 Dockfile 을 공유 하여 커 뮤 니 티 에 공유 할 수 있 습 니 다.
전체적으로 말 하면 Docker 의 핵심 기술 은 다음 과 같다.
본인 의 재능 이 부족 하기 때문에 아래 에 참고 자 료 를 제시 합 니 다. 관심 이 있 는 친 구 는 확장 해서 읽 을 수 있 습 니 다. 반드시 Docker 에 대해 더욱 깊 은 인식 을 가지 게 될 것 입 니 다.
PaaS under the hood, episode 1: kernel namespaces
PaaS Under the Hood, Episode 2: cgroups
PAAS Under the Hood, Episode 3: AUFS
PaaS Under the Hood, Episode 4: GRSEC
PaaS under the hood, episode 5: Distributed routing with Hipache
후드 시리즈
LXC (Linux 가상 환경) 에 대한 간단 한 소개
docker 원리 안내
참고 자료
Docker 공식
Docker: 일치 성 을 갖 춘 자동화 소프트웨어 배치
Dockerfile 튜 토리 얼
일부 Docker 의 커 뮤 니 티 자원:
Segmentfault 의 Docker 서브 스테이션 문답
Docker 중국어 커 뮤 니 티
Docker 중국어 문서
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ubuntu 22.04에 캐디 설치 - HostnExtra이 기사에서는 Ubuntu 22.04에 Caddy를 설치하는 방법을 설명합니다. 이 문서는 설치 프로세스를 안내하고 웹 사이트를 호스팅합니다. Caddy 웹 서버는 Go로 작성된 오픈 소스 웹 서버입니다. Ubunt...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.