2016 09 30 Docker 笔记 - huyx/1 GitHub Wiki
一般概念
image, container, network, data volumes
client(docker CLI)
REST API
server(docker daemon)
CI(continuous integration)
CD(continuous deployment)
base image: ubuntu, alpine, fedora, busybox
什么是 docker service?
什么是 Docker Swarm?
如何创建微型服务应用?
Dokcer Machine
Docker Compose
Kitematic
Hypervisor-based Virtualization
curl -fsSL https://get.docker.com/ | sh
wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker <user>
docker run --rm hello-world
docker version
docker info
docker rm $(docker ps -aq -f ancestor=hello-world)
docker run -d -p 127.0.0.1:80:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:80:5000/udp training/webapp python app.py
$ docker run -d --name db training/postgres
$ docker run -d -P --name web --link db training/webapp python app.py
$ docker run -d -P --name web --link db:db training/webapp python app.py
$ docker run --add-host=docker:10.180.0.1 --rm -it debian
$ docker run -it
$ docker exec -it
docker save -o
docker laod -i
Ctrl-P,Q
# 删除所有已经退出的容器
docker rm $(docker ps -aqf status=exited)
docker logs -f
-p 对比 -P
提交更改:
docker commit [options] [container ID] [repository:tag]
docker commit XXXXXXXXXXXXXXX myname/myapp:1.0
其他命令:
docker build [options] [path]
docker build -t [repository:tag] [path]
ps, start, stop, restart
docker exec
dokcer commit
docker tag
docker build
docker push
docker inspect
其他命令:
$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
$ docker-machine ip my-docker-vm
$ docker port nostalgic_morse 5000
$ docker logs -f nostalgic_morse
$ docker top nostalgic_morse
$ docker inspect nostalgic_morse
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nostalgic_morse
$ docker stop nostalgic_morse
$ docker ps -l
$ docker start nostalgic_morse
$ docker rm nostalgic_morse
$ docker images
$ docker run -t -i ubuntu:14.04 /bin/bash
$ docker pull centos
$ docker run -t -i centos /bin/bash
$ docker search sinatra
$ docker commit -m "Added json gem" -a "Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2
$ docker run -t -i ouruser/sinatra:v2 /bin/bash
$ docker build -t ouruser/sinatra:v2 .
$ docker run -t -i ouruser/sinatra:v2 /bin/bash
$ docker tag 5db5f8471261 ouruser/sinatra:devel
$ docker push ouruser/sinatra
$ docker run -d -P --name web training/webapp python app.py
$ docker port web
$ docker network ls
$ docker network inspect bridge
$ docker network disconnect bridge networktest
$ docker network create -d bridge my-bridge-network
$ docker network inspect my-bridge-network
$ docker run -d --network=my-bridge-network --name db training/postgres
$ docker network connect my-bridge-network web
$ docker run -d -P --name web -v /webapp training/webapp python app.py
$ docker inspect web
$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
$ docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash
$ docker create -v /dbdata --name dbstore training/postgres /bin/true
$ docker run -d --volumes-from dbstore --name db1 training/postgres
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
$ docker run -v /dbdata --name dbstore2 ubuntu /bin/bash
$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
$ docker history ubuntu
$ docker build .
$ docker build -f /path/to/a/Dockerfile .
$ docker build -t shykes/myapp .
$ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .
$ docker build -t svendowideit/ambassador .
$ sudo start docker
$ sudo stop docker
$ sudo restart docker
$ sudo status docker
Dockerfile
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
MAINTAINER <name>
RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
RUN ["executable", "param1", "param2"] (exec form)
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
LABEL <key>=<value> <key>=<value> <key>=<value> ...
EXPOSE <port> [<port>...]
ENV <key> <value>
ENV <key>=<value> ...
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] (this form is required for paths containing whitespace)
COPY <src>... <dest>
COPY ["<src>",... "<dest>"] (this form is required for paths containing whitespace)
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)
VOLUME ["/data"]
USER daemon
WORKDIR /path/to/workdir
ARG <name>[=<default value>]
ONBUILD [INSTRUCTION]
STOPSIGNAL signal
HEALTHCHECK [OPTIONS] CMD command (check container health by running a command inside the container)
HEALTHCHECK NONE (disable any healthcheck inherited from the base image)
SHELL ["executable", "parameters"]
RUN
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash
$ echo test | docker run -i busybox cat