Docker入门学习笔记
Docker架构
镜像(Image) Docker 镜像相当于root文件系统。
容器(Container) 镜像和容器相当于,类和实例。容器可以被创建,启动,停止,删除
仓库(Repository)仓库可以看成代码控制中心,保存镜像
Docker Hello world
docker run ubuntu:15.10 /bin/echo "Hello world"
- run参数用来运行一个容器
- ubuntu:15.10 表示镜像名+tag
- /bin/echo "Hello world" 需要再容器中执行的命令
运行交互式的容器
docker run -i -t 让docker运行的容器实现对话
-t : 在新容器内指定一个伪终端或终端
-i : 允许你对容器内的标准输入输出进行交互
通过exit或者CTRL+D来退出容器
保持后台运行
- -d 在后台运行容器,并且打印容器id
容器状态STATUS:create | restarting | running or Up | removing | pause | exited (停止) | dead
在宿主主机内使用docker logs
,查看容器的标准输出
通过docker stop
停止容器,停止后容器不存在
Docker 容器使用
容器使用
拉取镜像
docker pull ubuntu
启动容器
docker run -it ubuntu /bin/bash
启动已停止运行的容器
docker ps -a
查看所有容器
docker start <容器 ID>
加入了-d参数默认不会进入容器,想要进入容器需要使用指令docker exec
停止容器
docker stop <容器 ID>
停止的容器也可以是同docker restart重启
进入容器
在使用-d参数时,容器启动后会进入后台,此时想要进入容器,可以通过以下指令进入:
- docker attach 使用此命令退出容器,会导致容器的停止
- docker exec : 推荐使用,因此退出容器终端不会导致容器的停止
docker exec -it <容器 ID> /bin/bash
导出和导入容器
导出本地某个容器,可以使用docker export
命令
docker export 容器 ID > ubuntu.tar
删除容器
docker rm -f 容器 ID
清理掉所有终止状态
docker container prune
WEB应用容器
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
- -p :将容器内部使用的网络端口随机映射在主机上。同时P也可以设置端口 5000:5000
网络端口的快捷方式
通过docker ps
命令可以查看到容器的端口映射。
docker还提供另外的快捷方式
docker port
可以查看指定容器的某个确定映射端口号
查看应用日志
动态展示 类似于 tail -f
docker logs -f <容器 id>
查看WEB应用程序容器的进程
可以使用docker top产看容器内部运行的程序
docker top NAME OR ID
Docker 镜像使用
当运行容器时,使用的镜像如果在本地不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像下载
列出镜像列表
使用docker images 来列出本地镜像
docker images
- REPOSITORY : 表示镜像的仓库源
- TAG:镜像的标签
同一仓库源可以有多个TAG,代表整个仓库源的不同个版本。可以使用RESPOSITORY:TAG来定义不同的镜像
获取一个新的镜像
当本地使用不存在的镜像试试Docker就会自动下载镜像。如果要预先下载可以预先使用docker pull
下载
使用docker search搜索合适的镜像
删除镜像
docker rmi hello-world
创建镜像
当从 docker 镜像仓库中下载的镜像不能满足需求,可以通过 以下两种方式进行更改
- 从一创建的容器中更新镜像,并提交镜像
- 使用Dockerfile指令来创建一个新的镜像
更新镜像
更新镜像之前,使用镜像来创建一个容器
docker run -t -i ubuntu:15.10 /bin/bash
运行的容器内使用apt-get update
命令进行更新
在完成操作之后,使用exit退出容器
此时容器,是按照需求更改的容器。可以通过docker commit
来提交容器副本
docker commit -m="udpate message" -a="author" <容器ID> buntu:15.10
参数说明:
- -m:提交描述信息
- -a:指定镜像的作者
- buntu:15.10 ::指定要创建的目标镜像名称
构建镜像
使用docker build,创建新的镜像。需要创建Dockerfile文件,其中包含一组指令如何构建镜像
FROM centos:6.7
MAINTANER Fisher "fisher@xx.com"
RUN /bin/echo 'root:123456' | chpasswd
EXPOSE 22
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上添加一个新的层,前缀必须大写。
FROM
指定使用了哪个镜像源
RUN指令告诉docker在镜像中执行什么命令,安装什么
最后使用Docker文件,通过docker build来构建镜像
docker build -t personal/centos:6.7
-t
: 指定要创建的目标镜像名.
: Dockerfile文件所在目录,可以指定Docker的绝对路径-f
: 指定要使用的Dockerfile路径
设置镜像标签
docker tag <镜像 ID> personal/centos:dev
通过此操作会添加一个镜像ID相同,TAG不同的镜像
Docker容器连接
容器中运行网络应用,可以通过 -p
或-P
参数指定端口映射。
网络端口映射
-P
:是指容器内部端口随机映射到主机的高端口-p
:是容器内部端口绑定到指定的主机端口
也可以指定容器绑定的网络地址
docker run -d -p 127.0.0.1:5001:5000 person/webapp python app.py
如此可以通过访问127.0.0.1:5001
来访问容器的5000端口
默认都是绑定tcp端口,如果要绑定UDP端口,可以在端口后面加上/udp
docker run -d -p 127.0.0.1:5001:5000/udp person/webapp python app.py
通过docker port
NAME 5000 可以查看端口绑定情况
Docker容器互联
docker有一个连接系统允许将多个容器连接在一起,共享连接信息
docker连接会创建一个父子关系,其中父容器可以看到子容器的信息
容器命名
当创建容器时,docker会自动进行命名。同时,可以使用--name
表示来命名容器
docker run -d --name NAME training/webapp python app.py
新建网络
先创建一个新的Docker网络
docker network create -d bridge test-net
- -d : 参数指定Docker网络类型,有bridge,overlay
其中overlay网络类型用于Swarm mode
连接容器
运行一个容器并连接新建的test-net网络
docker run -itd --name test1 --network test-net ubuntu /bin/bash
打开新终端,在运行一个容器并记入到test-net网络
docker run -itd --name test2 --network test-net ubuntu /bin/bash
此时test1容器和test2容器建立了互联关系
配置DNS
可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容设置容器DNS:
{
"dns":[
"114.114.114.114",
"8.8.8.8"
]
}
配置完成需要重启docker生效
查看容器的DNS是否生效使用以下命令
docker run -it --rm ubuntu cat etc/resolv.conf
手动指定容器配置
只设置特定容器DNS
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
Docker仓库管理
Docker Hub
登录登出
输入用户名密码,登录成功后,可以从docker hub上拉去自己账号下的全部镜像
docker login // docker logout
拉取镜像
docker search ubuntu
将镜像下载到本地
docker pull ubuntu
推送镜像
用户登陆后
通过docker push
将镜像推送到Docker Hub