镜像
查看本地镜像docker images
在镜像仓库获取一个新的镜像docker pull imageName
下载好后可以使用这个镜像了docker run imageName
删除镜像docker rmi imageName
创建镜像:镜像库中下载的镜像不能满足我们的需求时,可以通过下面两种方式对镜像进行修改:
1.从已经创建的容器中更新镜像,并提交
首先用当前镜像创建一个容器,docker run -it imageName /bin/bash
在运行容器内使用apt-get update来更新,完成后exit命令来退出容器
runoob@runoob:~$ docker commit -m="has update" -a="runoob" containerID TargetImageName
-m:提交的描述信息
-a:指定镜像作者
2.使用Dockerfile指令来创建一个新的镜像
从零开始创建一个新镜像,我们需要创建一个Dockerfile文件,vim打开文件后输入以下内容
FROM centos:6.7
MAINTAINER **** "******@***.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
每一条指令都会在镜像上创建一个新的层,每个指令的前缀都必须是大写
From指定是哪个镜像源
MAINTAINER镜像是谁写的,姓名+邮箱
RUN指令告诉docker在镜像内执行什么命令,安装了什么
Dockerfile文件通过docker build命令来构建一个镜像
EXPOSE暴露端口配置
CMD指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
-t:我们要指定的镜像名
.:镜像位置
得到结果如下图所示:
查看当前所有的镜像,发现已有我们新建的镜像了:
tag设置镜像标签docker tag NewTagName ImageName:NewTagName
容器连接
外部访问容器内部应用可以通过-P和-p参数来指定端口映射。
-P是容器内部端口随机映射到主机端口
-p是容器内部端口绑定到指定的主机端口
例如:创建python应用容器,使用-P绑定网络地址后,查看进程可以看到其端口绑定关系为主机端口3276->容器端口5000
利用-p指定端口绑定,比如绑定到127.0.0.1
这样我们可以通过访问127.0.0.1:5001来访问容器的5000端口,此种方法是默认绑定TCP端口,如果要绑定UDP端口,可以在端口后加上/udp,即
docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py
查看容器端口绑定情况:docker port containerName portNum
容器关联
端口连接并不是唯一一种容器连接的方法,docker有一个连接系统可以将多个容器连接在一起,共享连接信息,docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。
下面新建一个Docker网络,-d:参数指定 Docker 网络类型,有 bridge、overlay。创建好后查看全部网络的列表。
runoob@runoob:~$ docker network create -d bridge NetworkName
runoob@runoob:~$ docker network ls
结果示意图如下:
此时,运行test1容器和test2容器,并连接到新建的test-net网络
runoob@runoob:~$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
runoob@runoob:~$ docker run -itd --name test2 --network test-net ubuntu /bin/bash
下面通过Ping来证明test1容器和test2容器建立了互联关系,同理可验证test1
runoob@runoob:~$ docker exec -it test1 /bin/bash
进入test1容器
root@******:/# ping test2
结果如下:
这样test1容器和test2容器就建立了互联关系。