docker数据管理与dockerfile创建、端口映射网络通信

一个完整的docker镜像可以支撑一个docker容器的运行,在docker的挣个使用过程中进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像

数据管理:数据卷

# 创建数据卷
[root@localhost ~]# docker run -d -v /test --name abc bbox:v1
[root@localhost ~]# docker exec -it abc /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   test  tmp   usr   var
/ #
# -v 在容器内创建数据卷 -v xxx -v xxx 可以指定多个数据卷

# 数据卷映射
 [root@localhost ~]# docker run -d -it  -v /abc:/test --name alias bbox:v1
 # 此时在宿主的/abc目录下创建文件将会同步到容器/test中

# 如果需要在容器之间共享一些数据
[root@localhost ~]# docker run -d -it --volumes-from alias --name alias1 bbox:v1 
# 此时容器之间数据将共享。

基于已有容器创建镜像

[root@localhost ~]#docker commit [选项] 容器ID/名称 仓库名称:[标签]
# -m:说明信息
# -a: 作者信息
# -p: 生成过程中停止容器的运行
例子:docker commit -m "new image" -a "daoke" 容器ID或名称 新名称:标签

dockerfile 操作指令

指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为FROM。每创建一个镜像就需要一条FROM指令
MAINTAINER 名字说明新镜像的维护人信息。注:docker已弃用但不影响使用,新指令为LABEl
RUN 指令在所基于的镜像上执行命令,并提交到新的镜像中
CMD [“要运行的程序”,“参数1”,“参数2”]指定启动容器时要运行的命令或脚本,只能有一条CMD命令。
EXPOSE 端口号指定新镜像加载到docker时要开启的端口
ENV 环境变量 变量值设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/ 目录将源文件复制到目标文件,源文件要与dockerfile位于一个目录下,或者是一个URL
COPY 源文件/目录 目标文件/ 目录将本地主机上的源文件、目录复制到目标地点 源文件要与dockerfile位于一个目录下
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器是的用户
WORKDIR 路径为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令
ENTRYPOINT使用容器作为可执行文件时应定义。不可被覆盖

基于dockerfile创建nginx镜像:

# 一般创建独立目录
mkdir nginx
[root@localhost ~]# vim nginx/dockerfile
# 一些描述信息 
#nginx 
#nginx:v1
# 第一行必须指明基于的基础镜像
FROM centos:7
# 维护改镜像的用户信息
LABEL maintainer="nginx"
# 镜像操作指令
RUN rm -rf /etc/yum.repos.d/*
COPY CentOS-Base.repo /etc/yum.repos.d/
RUN yum -y install gcc gcc-c++ make openssl-devel pcre-devel gd-devel net-tools wget curl \
	telnet iproute \
	&& yum clean all \
	&& rm -rf /var/cache/yum/*
ADD nginx-1.12.0.tar.gz ./
RUN cd nginx-1.12.0 \
	&& ./configure --prefix=/usr/local/nginx \
	 --with-http_ssl_module \
	 --with-http_stub_status_module \
	&& make -j 2 && make install \
	&& rm -rf /usr/local/nginx/html/* \
	&& echo "ok">/usr/local/nginx/html/index.html \
	&& cd / && rm -rf nginx-1.12.0* \
	&& ln -s /usr/local/nginx/sbin/* /usr/local/sbin \
	&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
[root@localhost ~]# docker build -t nginx:v1
# 等待镜像制作完成

端口映射网络通信:

# 随机端口
[root@localhost ~]# docker run -d -it -P nginx:v1 
[root@localhost ~]# docker ps -a
5fbae5201f04        nginx:v1            "nginx -g 'daemon of…"   4 hours ago         Up 4 hours          0.0.0.0:32769->80/tcp    nginx

# 固定端口
[root@localhost ~]# docker run -d -it -p 80:80 nginx:v1 
[root@localhost ~]# docker ps -a
5fbae5201f04        nginx:v1            "nginx -g 'daemon of…"   4 hours ago         Up 4 hours          0.0.0.0:80->80/tcp    nginx

# -P 大P为随机49000 - 49900端口
# -p 小p为指定固定端口

容器互联:

# link 不推荐使用
# 先创建一个源容器
[root@localhost ~]# docker run -d -it -P --name aaa bbox:v1
# 创建接受容器
[root@localhost ~]# docker run -d -P -it --name aaab --link aaa:aaa bbox:v1 
# 进入容器测试连通性
[root@localhost ~]# docker exec -it aaab /bin/sh
/ # ping aaa
PING aaa (172.17.0.6): 56 data bytes
64 bytes from 172.17.0.6: seq=0 ttl=64 time=0.109 ms
64 bytes from 172.17.0.6: seq=1 ttl=64 time=0.065 ms
64 bytes from 172.17.0.6: seq=2 ttl=64 time=0.066 ms
64 bytes from 172.17.0.6: seq=3 ttl=64 time=0.064 ms
64 bytes from 172.17.0.6: seq=4 ttl=64 time=0.064 ms
64 bytes from 172.17.0.6: seq=5 ttl=64 time=0.096 ms

# 自定义docker网络
[root@localhost ~]# docker network  create -d bridge my-net
[root@localhost ~]# docker run -d -it --name linux --network my-net centos:7
[root@localhost ~]# docker run -d -it --name linux1 --network my-net centos:7
[root@localhost ~]# docker exec -it linux /bin/bash
[root@7bdc1a9031af /]# ping linux1
PING linux1 (172.18.0.3) 56(84) bytes of data.
64 bytes from linux1.my-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.121 ms
64 bytes from linux1.my-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.055 ms
# 同理登录linux1
[root@localhost ~]# docker exec -it linux1 /bin/bash
[root@49948a9b2f17 /]# ping linux
PING linux (172.18.0.2) 56(84) bytes of data.
64 bytes from linux.my-net (172.18.0.2): icmp_seq=1 ttl=64 time=0.120 ms
64 bytes from linux.my-net (172.18.0.2): icmp_seq=2 ttl=64 time=0.091 ms
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值