Installing Docker on Ubuntu
[https://docs.docker.com/engine/install/ubuntu/][https://docs.docker.com/engine/install/ubuntu/]
1. Install Docker
1.1 Installing Docker Community Edition on Ubuntu
이전 버전의 docker를 지워줍니다.
HTTPS를 통해 repository를 다운받을수 있도록 관련 패키지를 설치합니다.
gpg 키를 등록시킵니다.
Repository를 설치후 Docker Community Edition을 설치합니다.
1.2 Docker Configuration
1.2.1 docker group
기본적으로 Docker Deamon은 TCP Port대신에 Unix Socket으로 연결이 됩니다. Unix Socket은 root에 소유된 것이므로,
Docker를 실행하기 위해서는 항상 반드시 sudo로 해주어야 합니다.
sudo를 피하기 위해서는 docker group을 만들어주고, 여기에 users 를 등록시켜주면 됩니다.
로그 아웃후 다시 로그인 합니다.
잘되는지 확인은 다음과 같이 합니다.
1.2.2 Purge AppArmor
container를 삭제하려고 할때 permission denied 에러가 나올수 있는데, 이 경우 AppArmor 를 삭제해주면 됩니다.
1.2.3 iptables option
docker run -p port:port 또는 -P 옵션을 할때 docker는 iptables에서 해당 포트를 public으로 만듭니다.
이는 심지어 ufw default deny incoming 을 해도 ufw는 막지를 못합니다.
docker가 마음대로 iptalbes를 변경 못하도록 하기 위해서는 다음과 같이 옵션을 주면 됩니다.
iptalbes에서 확인해봅니다.
다음과 같이 지울수 있습니다.
-D <체인이름> <헤더번호>헤더번호>체인이름>
1.2.4 Enable UFW forwarding
Docker 는 기본적으로 container networking을 하기 위해서 bridge를 사용합니다.
문제는 ufw 는 모든 forwarding traffic을 drop시켜버립니다. 따라서 ufw의 forwarding policy를 설정해주어야 합니다.
또한 외부 host에서 docker container에 접속하기 위해서는 2376포트를 열어주어야 합니다.
2376포트는 Docker의 기본 포트입니다.
다음을 DROP에서 ACCEPT로 바꿔줍니다.
1.2.5 Configure Docker to start on boot
1.2.6 Install Ubuntu Libraries
Docker 내부에서..
2. Docker 101
2.1 Getting Started
Images 보기
실행중이거나 중단된 containers보기
종료된 container 삭제시키기
2.2 Interactive Mode
--name [컨테이너 이름]
-i, --interactive
--user [유저이름]
기본적으로 root 계정으로 로그인한다
실행중인 container에 접속은 다음과 같이 합니다.
2.3 VIM Ansi Mode
Docker 에서 vi를 실행시킬때 이상현상이 일어난다면 다음과 vim에서 다음과 같은 명령어를 쳐줍니다.
또는 .vimrc 파일안에 넣어도 됩니다.
또는 다음과 같이 합니다.
2.4 Delete all containers
2.5 Delete all images
2.6 Copy
Host File <–> Docker Container 복사하기
2.7 Commit
docker run을 하게 되면 실제로는 새로운 container를 생성하게 됩니다.
여기에서 CONTAINER ID를 잡아서 commit 시킵니다
2.8 Push
만약 접속이 안되면 docker login 으로 해결.
잘됐으면 hub.docker.com 으로 들어가서 삭제 필요합니다.
Local standard input, output, error streams 를 running container에 붙입니다.
즉 실행중인 docker container의 로그를 볼 수 있습니다.
2.10 Inspect & IP Address
3. Dockerfile
3.1 Basic
Dockerfile 은 우선 FROM <이미지> 명령어부터 시작을 합니다.
`vi Dockerfile` 로 다음을 입력합니다.이미지>
docker build -t [이미지 이름]를 하면 새로운 이미지가 생성이 됩니다.
이후에 docker run myubuntu 로 “Hello! This is ANDERSON!” 확인합니다. docker run -p 9876:80 -d -it myubuntu nginx -g "daemon off;" 이것로 daemon 띄워놓고 크롬에서 확인합니다. -g "daemon off;" 옵션은 nginx만 실행하면.. daemon으로 실행되는게 이것을 막기 위함입니다.
4. Networks
4.1 Basic Networks
위의 3가지 networks는 docker의 기본적인 네트워크입니다.
bridge 네트워크는 ifconfig를 치면 나오는 docker0 를 나타냅니다.
docker run –net= 이런식으로 network를 지정하지 않는한,
기본적으로 모든 container는 docker0에 붙습니다.
만약에 docker run –net=none 으로 시작할 경우 해당 docker는 network를 할 수 없습니다.
inspect를 통해서 자세한 정보를 얻을수 있습니다.
5. User defined networks
새로운 bridge network 또는 overlay network를 만들어서 containers를 isolate하는데 사용할수 있습니다.
또한 network plugin 그리고 remote network를 만들수도 있습니다.
5.1 Bridge Network
–net 을 통해서 해당 network를 사용하도록 할 수 있습니다.
동일한 network를 공유하는 containers들 끼리는 서로 network communication이 가능합니다.
single host안에 상대적으로 작은 network를 구성시 bridge network가 좋습니다.
하지만 매우 큰 networks를 구성해야 한다면 overlay를 사용하는것이 좋습니다.