Docker 로컬에 설치된 이미지 업데이트(Dockerfile)


“docker images“ 현재 가지고 있는 이미지 확인

(ubuntu)를 가지고 테스트 할 예정



~/Docker/Dockerfile 이라는 파일을 생성한 후에 다음과 같이 필요한 패키지에 맞춰서

작성해준다.



docker build --tag ubuntu_parkhs:0.3 ./


그 후에 build를 사용하여 실행시켜주면

아래 그림과 같이 생성됨을 알 수 있다.

*컨테이너에 이미지를 적용하여 패키지를 설치한 후에 이미지를 만드는 것보다 Dockerfile을 만들어서 build하는 것이 용량이 더 작은 것 같다.



앞에서 만든 웹서버를 이미지로 만들어보자.




실행되고있는 컨테이너 “web3"을 중지시키고(docker stop web3)

이미지를 만든다.


docker commit <옵션> <컨테이너 이름> <이미지 이름>:<태그>

 -a : 이미지를 작성한 작성자 이름을 지정함

 -m : 이미지 생성과 관련된 로그 메세지를 지정함


docker commit -a "이미지생성테스트“ -m "httpd설치” web3 oraclelinux6.8/httpd:0.2




docker images 로 아래와 같이 생성된 이미지를 확인할 수 있다.



생성된 이미지를 가지고 “web4"라는 이름으로 컨테이너에 적용시킨다.

8082포트와 80번포트 맵핑



"web4" 컨테이너를 실행시키고 접속한다.



8082번포트로 접속하니 아파치 기본페이지가 나온다. 


Docker 이용한 웹서버 구축


2가지 방법

 1. 사람들이 Docker image를 repository 올린 것을 다운받아서 사용

 2. Dockerfile 만들어서 진행


1번 방법 -

우선 ubuntu 이미지 검색

docker search ubuntu



상단의 표시된 ubuntu 이미지 다운로드

docker pull ubuntu


다운로드된 이미지 확인

docker images



다운로드된 이미지로 컨테이너 생성

docker run -i -t -d -p 80:80 --name web ubuntu /bin/bash


-d : 백그라운드 실행

--name : 이미지의 이름을 지정

ubuntu 컨테이너 접속

docker attach web



호스트명이 바뀌어있다.


ubuntu로 접속이 되었다면 패키지 업데이트 및 apache2, php 설치

apt-get update

apt-get install apache2

apt-get install php


설치가 되었다면 apache2를 restart 해주도록 한다.

service apache2 restart


웹브라우저에서 확인







다운로드 받은 이미지 경로 - /var/lib/docker/image/devicemapper/imagedb/content/sha256


Docker 명령어

docker version (버젼확인)

docker ps -a ( 컨테이너 확인하기)

docker search 찾고싶은 이미지 (ex. docker search centos)

docker pull centos (이미지 내려받기)

docker images (내려받은 이미지 확인)

docker run --name jnserver -t -i centos:latest /bin/bash

(내려받은 centos 이미지 실행)

dcoker exit (컨테이너 빠져나오기)

docker start/stop (컨테이너 시작/종료)

docker attach (컨테이너 접속하기)

docker exec (컨테이너 외부에서 도커 내부 명령 실행하기)

docker rmi(이미지 삭제)

docker rm(컨테이너 삭제)


컨테이너 생성 및 Image와 맵핑



Linux설치 시 버전 확인방법(Redhat 기준)

uname -a 명령어는 Host OS 버전을 확인한다.

cat /etc/redhat-release 로 확인 가능!



diff - 컨테이너가 처음 이미지 상태에서 어떤 파일 변경이 있었는지 확인

docker diff <컨테이너 이름>


A : 추가된 파일

C : 변경된 파일

D : 삭제된 파일



OS=Oracle Linux 6.8 (커널버전 : 4.1.12-37 GNU/Linux)


Docker 설치 과정

1. Linux 설치


2. 네트워크 설정


3. sudo 계정 설정


4. yum update (패키지&커널 업데이트)


5. /etc/yum.repos.d/docker.repo 경로에 다음과 같이 작성


6. yum install docker-engine (Docker package 설치)


7. service docker start


8. docker run hello-world (정확히 설치되었는지에 대한 테스트 이미지 실행)


9. groupadd docker (docker 그룹 생성)


10. usermod -aG docker username (docker 그룹에 사용자 추가)


11. /etc/sysconfig/docker r여로에 다음과 같이 내용 추가




컨테이너(?) :

 소프트웨어가 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 이동되었을 때 어떻게 안정적으로 운영하느냐의 문제를 해결하는 솔루션이다.


가상화 vs 도커

가상화 기술을 사용하면 이동되는 패키지가 가상머신이 되며, 여기에는 전체 운영체제와 애플리케이션이 모두 포함된다. 

세 개의 가상머신을 구동하는 물리 서버는 하이퍼바이저와 그 위에서 구동되는 세 개의 별도 운영체제를 가지게 된다.

반면 단일 운영체제를 구동하는 도커는 세 개의 컨테이너에 담긴 애플리케이션을 구동하는 서버과 각각의 컨테이너가 

운영체제 커널을 다른 컨테이너와 공유한다. 

운영체제의 공유 부분은 읽기 전용인 반면, 각각의 컨테이너에는 기록을 위한 자체적 마운트(예를 들어 컨테이너에 접속하는 방법)가 있다. 

이는 컨테이너가 가상머신보다 훨씬 가볍고 더 적은 자원을 사용한다는 의미다.


가상화(XEN, KVM)와 도커



컨테이너의 단점

1. Host OS에 종속적

리눅스 컨테이너는 OS에서 Linux Kernel이 관리하는 것이므로, 당연히 Linux 이외의 다른 OS에서는 동작하지 않으며, 

컨테이너 환경에서도 다른 OS를 설치할 수 없다.

ex) Ubuntu Host OS에서 컨테이너에 CentOS를 설치한다고 해도 실행중인 커널은 Ubuntu 커널이다.


2. 컨테이너별 커널구성이 불가능

그러나 컨테이너마다 다른 커널 작업을 수행 할 수는 없습니다. 커널의 기능으로 구성되는 환경이기 때문에 당연히 

전체 컨테이너에서 보이는 커널은 동일합니다.

따라서 컨테이너에서 보이는 장치나 로드되는 커널 모듈은 모두 동일합니다.

+ Recent posts