教程地址:
https://www.runoob.com/docker/docker-tutorial.html
(另一个很好的教程):http://www.dockerinfo.net/document
镜像表示:
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 如ubuntu:15.10
docker命令帮助
docker # 查看全部命令
docker command --help # 查看command使用详情
新建容器
docker run ubuntu:15.10 /bin/echo "Hello world"
各个参数解析:
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
新建交互式的容器
docker run -i -t --name runtest ubuntu:15.10 /bin/bash
各个参数解析:
通过运行 exit 命令或者使用 CTRL+D 来退出容器
启动容器(后台模式)
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker run -itd --name ubuntu-test ubuntu /bin/bash # 交互式后台运行
查看容器
docker ps # 查看正在运行容器
docker ps -l # 查看最新一个创建的容器
docker ps -a # 查看所有容器
输出详情介绍:
也可以使用 docker inspect 来查看容器的名字
docker inspect -f "{{ .Name }}" aed84ee21bde
>>/web
查看容器内的标准输出
docker logs 容器名/容器id
docker logs -f 容器名/容器id
容器使用(非新建)
docker start 容器名/容器id # 启用容器
docker stop 容器名/容器id # 停止容器
docker restart 容器名/容器id # 重启容器
docker start ... 包含容器文件系统挂载的操作
docker stop ... 包含容器文件系统卸载的操作
docker restart ... 不包含容器文件系统的卸载与挂载操作,本质上docker restart不涉及文件系统的操作,因此restart命令并不是stop与start两个命令的顺序叠加。
但为了保证容器的根文件系统与内存系统mount的正确性,推荐对一个容器的重启使用docker stop xxx
然后 docker start xxx,而非docker restart xxx。
进入容器
# 使用-d启动容器后,容器会在后台运行,要想进入,可使用以下两个方式
docker attach 容器名/容器id # exit后,会停止容器,同时当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
docker exec -it 容器名/容器id /bin/bash #推荐,exit后,不会停止容器
删除容器
docker rm -f 容器名/容器id # 强制删除,即使容器在运行
容器更新
# 某个使用相同镜像的容器,新安装了iputils-ping,然后提交到了镜像中
# 另一个使用相同的容器,则可如下更新后安装
apt-get update
apt install iputils-ping
指定端口
https://www.runoob.com/docker/docker-container-connection.html
docker run -d -P training/webapp python app.py # 随机端口
docker run -d -p 5000:5000 training/webapp python app.py # 指定端口
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py # 绑定网络ip,访问127.0.0.1:5001则可访问容器5000端口
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py # /udp绑定容器udp端口 ,127.0.0.1:5000->5000/udp
docker port 容器名/容器id # 查看容器端口映射,如返回 5000/tcp -> 0.0.0.0:5000
检查容器
docker top 容器名/容器id # 查看容器内部运行的进程
docker inspect 容器名/容器id # 查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
列出镜像列表
docker images
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
查找镜像
docker search 镜像名
拉取镜像
docker pull 镜像名 # 默认拉取最新版本,
docker pull 镜像名:版本号 # 拉取指定版本
删除镜像
docker rmi 镜像名(或镜像名:版本号)
设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
# docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。
可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
配置完,需要重启 docker 才能生效。
查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:
$ docker run -it --rm ubuntu cat etc/resolv.conf
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
–rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。
http://www.dockerinfo.net/%e6%95%b0%e6%8d%ae%e5%8d%b7volumes
https://www.cnblogs.com/wade-luffy/p/6542539.html
生产环境中使用Docker的过程中,往往需要对数据进行持久化(挂载一个主机目录作为数据卷方式),或者需要在多个容器之间进行数据共享(数据卷容器),这必然涉及容器的数据管理操作。
其实,不挂载主机目录,仅用 -v /path的容器,就是数据卷容器
先使用下载的镜像启动容器。
$ sudo docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#
注意:记住容器的 ID,稍后还会用到。
在容器中添加 json 和 gem 两个应用。
root@0b2616b0e5a8:/# gem install json
当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。
$ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
使用 docker images 来查看新创建的镜像。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
training/sinatra latest 5bc342fa0b91 10 hours ago 446.7 MB
ouruser/sinatra v2 3c59e02ddd1a 10 hours ago 446.7 MB
ouruser/sinatra latest 5db5f8471261 10 hours ago 446.7 MB
之后,可以使用新的镜像来启动容器
$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
root@78e82f680994:/#
总结的好,不用精简:https://www.runoob.com/docker/docker-dockerfile.html
补充:http://www.dockerinfo.net/image%e9%95%9c%e5%83%8f