Docker 基本概念與指令操作

35
蒕!!!!耷⸱!!揞㒣䥥 䥞ⓒ↢!!!!!!!!! Ԧ ؍疑ԧ

Transcript of Docker 基本概念與指令操作

Page 1: Docker  基本概念與指令操作
Page 2: Docker  基本概念與指令操作

Docker?

2

Docker 2013 dotCloud Google Go Linux Apache 2.0 GitHub

Page 3: Docker  基本概念與指令操作

Docker

3

Docker Docker Linux LXC namespaces cgroups Another UnionFS AUFS LXC Docker

Page 4: Docker  基本概念與指令操作

VM

4

Virtual Machines virrutalized

Page 5: Docker  基本概念與指令操作

5

Page 6: Docker  基本概念與指令操作

Docker

6

Page 7: Docker  基本概念與指令操作

NAMESPACES VS. CGROUPS

7

Namespaces provide isolation: •pid (processes) •net (network interfaces,

routing...) • ipc (System V IPC) •mnt (mount points,

filesystems) •uts (hostname) •user (UIDs)

Control groups control resources: •cpu (CPU shares) •cpusets (limit processes to a CPU)•memory (swap, dirty pages) •blockio (throttle reads/writes) •devices •net_cls, net_prio: control packet class and priority

Page 8: Docker  基本概念與指令操作

Docker

8

• ->

• docker, fuck

Page 9: Docker  基本概念與指令操作

Docker

9

Docker

• Image

• Container

• Repository

Page 10: Docker  基本概念與指令操作

Docker Images

10

Docker

Docker

; VM

VM

Docker

Page 11: Docker  基本概念與指令操作

Docker Container

11

Docker

VM

Instance

Container

Page 12: Docker  基本概念與指令操作

Docker Repository

12

• Public

• Private

* Docker Git GitHub

Page 13: Docker  基本概念與指令操作

13

Page 14: Docker  基本概念與指令操作

Docker

14

$ curl http://files.imaclouds.com/scripts/docker_install.sh | sh

OR

OR

Cloud Platform Image….

+ +

Page 15: Docker  基本概念與指令操作

Docker version and info

15

$ docker -v $ docker version Docker version 1.9.0, build 76d6bc9

docker

$ docker info Containers: 7 Images: 108

Page 16: Docker  基本概念與指令操作

images

16

hello-world image

$ docker pull hello-world b901d36b6f2f: Pull complete … P.S latest

docker image

$ docker pull ubuntu:14.04 P.S Image docker

Page 17: Docker  基本概念與指令操作

Container

17

Hello-world Container

$ docker run hello-world Hello from Docker. ….

Ubuntu Container

$ docker run ubuntu:14.04 /bin/echo 'Hello world’ $ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

Page 18: Docker  基本概念與指令操作

Container log

18

Container ps

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 139218fe7bd4 hello-world "/hello" 22 minutes ago Exited (0) 21 minutes ago angry_pike

P.S -a , -q ID, -s , -l

, -n=“” , -before=“” ,-after=“”

$ docker logs --tail <Container_ID>

Page 19: Docker  基本概念與指令操作

Docker

19

Container

$ docker exec -t -i <Container_ID> root@cbddb5419e5a:/# P.S -t , -i

$ docker run --rm -t -i --name=“my-ubuntu” ubuntu:14.04 /bin/bash P.S --rm , --name container

Page 20: Docker  基本概念與指令操作

Stop Start Restart Remove

20

Container

$ docker stop <Container_ID> P.S -t

Container

$ docker start <Container_ID> $ docker restart <Container_ID>

Container

$ docker rm <Container_ID> $ docker ps -a -q | xargs docker rm

Page 21: Docker  基本概念與指令操作

Docker Container

21

JSON

$ docker inspect <Container_ID> $ docker inspect -f ‘{{.NetworkSettings.IPAddress}}’<Container_ID> P.S -f GO

$ docker top <Container_ID>

Page 22: Docker  基本概念與指令操作

22

image

Page 23: Docker  基本概念與指令操作

Docker Hub

23

https://hub.docker.com/

Page 24: Docker  基本概念與指令操作

Docker Hub

docker hub

$ docker login Username : test

docker hub

$ docker logout

24

Page 25: Docker  基本概念與指令操作

Image

Ubuntu Container

$ docker run -idt ubuntu:14.04 f5f8dc8cd20c646d560b2aa553c3

Ubuntu Container

$ docker exec -ti <contianer_id> bash

25

Page 26: Docker  基本概念與指令操作

apt-get apache2 sshd

$ apt-get install -y apache2 openssh-server vim

container container

$ docker diff <container_id> C /var/log/faillog C /var/log/lastlog A /var/www A /var/www/html A /var/www/html/index.html

26

Page 27: Docker  基本概念與指令操作

boot_run

Container boot_run.sh /etc

27

#!/bin/bash

CMD=${1:-"exit 0"}

if [[ "$CMD" == "-d" ]]; then service apache2 start /usr/sbin/sshd -D -d else /bin/bash -c "$*" fi

container boot_run.sh

$ chown root.root /etc/boot_run.sh $ chmod 700 /etc/boot_run.sh

Page 28: Docker  基本概念與指令操作

sshd

container

$ mkdir /var/run/sshd $ echo 'root:123456' | chpasswd $ sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config $ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd $ echo "export VISIBLE=now" >> /etc/profile

28

Page 29: Docker  基本概念與指令操作

boot_run.sh

container script

$ /etc/boot_run.sh -d Set /proc/self/oom_score_adj from 0 to -1000 debug1: Bind to port 22 on 0.0.0.0. Server listening on 0.0.0.0 port 22. debug1: Bind to port 22 on ::. Server listening on :: port 22.

29

Page 30: Docker  基本概念與指令操作

container image

container

$ docker commit -m "Add apache2 and sshd ..." <container_id> 3d2d0c1af482a206abf8b581e4 P.S tag , kairen/apache:1.0.0

docker images <none> tag

REPOSITORY TAG <none> <none>

docker tag

$ docker tag <image_id>

30

Page 31: Docker  基本概念與指令操作

images

run image

$ docker run -d -p 8080:80 -p 10022:22 --name apache2 kairen/apache2:1.0.0 /bin/sh -c "/etc/boot_run.sh -d" P.S /etc/boot_run.sh -d script

port

$ docker port <container_id> 22/tcp -> 0.0.0.0:10022 80/tcp -> 0.0.0.0:8080

31

Page 32: Docker  基本概念與指令操作

apache2 ssh

browser 8080 port

ssh client sshd

$ ssh -p 10022 [email protected] [email protected]'s password:

stop rm container

$ docker stop <container_id> && docker rm <container_id>

32

Page 33: Docker  基本概念與指令操作

Docker hub

docker image docker hub

$ docker push kairen/apache2:1.0.0 The push refers to a repository [docker.io/kairen/apache2] (len: 1) 3d2d0c1af482: Pushing [=============================================> ] 74.99 MB/83.1 MB

image

$ docker search kairen // kairen

$ docker search kairen/apache2 // kairen, apache2

33

Page 34: Docker  基本概念與指令操作

images

docker image

$ docker save kairen/apache2:1.0.0 > kairen-apache2.tar $ docker save -o kairen-apache2.tar kairen/apache2:1.0.0

image

$ docker load < kairen-apache2.tar $ docker load --input kairen-apache2.tar

34

Page 35: Docker  基本概念與指令操作

images

container

$ docker export <container_id> > ubuntu.tar

docker import

$ cat ubuntu.tar | docker import - kairen/ubuntu:14.04 url import

$ docker import http://example.com/exampleimage.tgz example/imagerepo

35