修改镜像源
(manjaro)只需要添加配置文件/etc/docker/daemon.json
1 2 3
| { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
|
或者使用–registry-mirror选项
一些Docker基础命令
容器操作
run: 通过运行镜像输出hello
docker run CONTAINER [COMMAND] [ARGS]
启动交互式容器
1 2 3
| $ docker run -it CONTAINER /bin/bash
$ docker run -it -d -p 127.0.0.1:12306:12306 --name postgres ichheitimg:9.1-deb /bin/bash
|
带名字的运行镜像
1
| $ docker run --name='name' CONTAINER echo 'hello'
|
守护形式运行容器
1 2
| $ docker run -it CONTAINER /bin/bash
|
可直接启动后台
配置选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| $ docker run -d CONTAINER [COMMAND] [ARG...]
|
设置容器的端口映射
1 2 3 4 5 6 7 8 9
|
$ docker run -p 80 -it CONTAINER /bin/bash
$ docker run -p 8080:80 -it CONTAINER /bin/bash
$ docker run -p 0.0.0.0:80 -it CONTAINER /bin/bash
$ docker run -p 0.0.0.0:8080:80 -it CONTAINER /bin/bash
|
create: 创建容器
1 2
| $ docker create -it ubuntu:latest
|
start: 启动容器
ps: 查看容器
docker ps [OPT]
rm: 删除容器
docker rm '{IMAGE}'
attach: 继续运行后台守护容器
docker attach '{IMAGE}'
dokcer attach [--detach-keys[=[]]] [--no-stdin][--sig-proxy[=true]] CONTAINER
1 2 3 4 5 6 7 8
| ```
> `docker logs [OPT] '{IMAGE}'` ```zsh
|
exec: 在已运行的容器中启动新进程
docker exec [OPT] CONTAINER [COMMAND] {ARGS}
stop/kill: 停止容器
docker stop [-t | --time[=10]] CONTAINER
docker kill CONTAINER
镜像操作
images/inspect: 查看镜像
docker iamges [OPT] [REPOSITORY]
docker inspect [OPT] CONTAINER|IMAGE [...]
docker search [OPT] TERM
pull: 拉取镜像
docker pull [OPT] NAME [:TAG]
构建镜像
commit: 通过容器
docker commit [OPT] CONTAINER [REPOSITORY[:TAG]]
1 2 3 4 5
|
$ docker commit deb ichheitimg:9.1-deb
|
import: 通过本地模板导入
docker import [OPT] file |URL|[REPOSITORY[:TAG]]
1 2
| $ cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
|
build: 通过Dockerfile文件
docker build
通过Dockerfile
1 2 3 4 5 6 7 8
| $ docker build [OPT] PATH | URL | -
|
Dockerfile格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| FROM [CONTAINER] MAINTAINER [MESSAGE] [COMMAND...] EXPOSE 80 CMD ["executable", "param1", "param2"] (exec mode) CMD command param1 param2 (shell mode) CMD ["param1", "param2"] (ENTRYPOINT指令搭配下的参数) ENTRYPOINT ["executable", "param1", "param2"] (exec mode) ENTRYPOINT command param1 param2 (shell mode) ADD <src> .. <dest> COPY <src> ... <dest> VOLUMN ["/data"] (共享数据等作用,使用时在build构建前应使用--volumes-from选项挂在数据卷容器) WORKDIR /path/to/workdir (指定工作目录) ENV <key> <value> ENV <key>=<value> ... USER user (e.g. | USER user | USER user:group | USER user:gid |) ONBUILD [INSTRUCTION] (添加触发器)
|
Dockerfile构建过程
- 从基础镜像运行容器
- 执行指令,对容器做修改
- 执行类docker commit操作,提交新镜像层
- 基于新镜像运行新容器
- 执行Dockerfile的下一指令直到所有指令执行完毕
save: 存入镜像
docker save
1 2
| $ docker save -o ubuntu_14.04.tar ubuntu:14:04
|
load: 载入镜像
docker load
1 2 3 4
| $ docker load --input ubuntu_14.04.tar
$ docker load < ubuntu_14.04.tar
|
push: 上传镜像
docker push NAME[: TAG] |REGISTRY_HOST[: REGISTRY_PORT]/NAME[: TAG]
1 2 3
| $ docker tag test:latest user/test:latest $ docker push user/test:latest
|
rmi: 删除镜像
docker rmi [OPT] IMAGE [...]
连接方式
unix:///var/run/docker.dock
tcp://host:port
fd://socketfd
Docker的远程访问
Docker容器互联
1 2 3 4 5 6 7 8
|
$ docker run --link=[CONTAINER]:[ALIAS] [IMAGE][COMMAND]
$ --icc=false --iptables=true $ --link
|
Docker容器的数据卷
为容器添加数据卷
1 2 3
|
$ sudo dcoker run -v ~/container_data:/data -it ubuntu /bin/bash
|
在Dockerfile中使用COLUMN下指定数据卷容器
1 2 3 4 5 6
|
$ docker build -t dorman/dvt . $ docker run -it --name test dorman/dvt
$ docker run -it --name test1 --volumes-from test ubuntu /bin/bash
|
Docker数据卷的备份和还原
1 2
| $ docker run --volumes-from [container name] -v local_catalogue:docker_catalogue ubuntu $ tar cvf /backup/backup.tar [container data volume]
|
Docker容器的跨主机连接
网桥实现
- 通过在主机和虚拟机之间使用同一个网段来跨主机连接
- 需要网络配置并且配置Docker网桥,并通过–fixed-cidr指定网络范围
- (/etc/network/interfaces)
Open vSwitch实现
环境准备
- 双网卡,Host-Only & NAT
- 安装Open vSwitch和网桥管理工具bridge-utils
- 同一网段的IP地址
操作
- 建立ovs网桥
- 添加gre连接
- 配置docker容器虚拟网桥
- 为虚拟网桥添加ovs接口
- 添加不同DOcker容器网段路由
weave实现