docker 镜像创建 及容器创建

Docker镜像的创建方法
基于已有镜像创建
基于本地模板创建
基于Dockerfile创建
导入镜像文件
[root@localhost ~]# docker load < centos7

查看docker镜像
[root@localhost ~]# docker images

添加镜像标签
[root@localhost ~]# docker tag guyton/centos7:latest centos:xsy

[root@localhost ~]# docker images

使用镜像创建容器
[root@localhost ~]# docker create -it centos:xsy

查看容器状态
[root@localhost ~]# docker ps -a

启动容器
[root@localhost ~]# docker start e3cb82ba08bd

查看启动的容器
[root@localhost ~]# docker ps
基于Dockerfile创建

Dockerfile是由一组指令组成的文件
Dockerfile结构大致组成为基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

步骤:
1.创建工作目录
2.在工作目录中创建并编写Dockerfile文件
3.编写相关执行脚本
4.使用Dockerfile生成镜像
docker build 【选项】 路径
5.使用新镜像运行容器测试
6、镜像上传到仓库保存

实例:使用Dockerfile创建镜像并在容器中运行
1.创建工作目录
[root@localhost ~]# mkdir apache

[root@localhost ~]# cd apache/
2.在工作目录中创建并编写Dockerfile文件
[root@localhost apache]# docker images | grep centos
guyton/centos6 latest 89e582eff18a 9 months ago 197MB
centos xsy 89e582eff18a 9 months ago 197MB

[root@localhost apache]# vim Dockerfile
#设置基础镜像
FROM centos

#维护该镜像的用户信息
MAINTAINER teacher xsy

#设置本地yum源
RUN mkdir /etc/yum.repos.d/bak ; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

ADD centos.repo /etc/yum.repos.d/centos.repo

#安装相关依赖包
RUN yum clean all ; yum -y install wget

安装apache服务

RUN yum -y install httpd

#开启端口80
EXPOSE 80

#复制位置网站首页文件
ADD index.html /var/www/html/index.html

#复制执行脚本到镜像中
ADD run.sh /run.sh

RUN chmod 755 /run.sh

#启动容器时执行脚本(制作镜像中不运行)
CMD ["/run.sh"]

3.编写相关执行脚本
[root@localhost apache]# vim run.sh

#!/bin/bash

清理httpd的缓存

rm -fr /run/httpd/*

启动apache服务

exec /usr/sbin/apachectl -D FOREGROUND

[root@localhost apache]# echo “hello world” > index.html

[root@localhost apache]# ll
总用量 16
-rw-r–r-- 1 root root 82 3月 1 16:18 centos.repo
-rw-r–r-- 1 root root 466 3月 1 16:16 Dockerfile
-rw-r–r-- 1 root root 12 3月 1 16:18 index.html
-rw-r–r-- 1 root root 71 3月 1 16:17 run.sh
4.使用Dockerfile生成镜像
[root@localhost apache]# docker build -t apache:ly ./
[root@localhost apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache ly f24d5541d140 About a minute ago 316MB
5.使用新镜像运行容器测试
[root@localhost apache]# docker run -d -p 8888:80 --name httpd apache:xsy
[root@localhost apache]# docker ps
[root@localhost apache]# curl http://192.168.10.1:8888
hello world
docker的数据统通信
1.数据管理操作
*方便查看容器内产生的数据
*多容器间实现数据共享

1.1两种管理方式
数据卷
数据卷容器
(一)数据卷
数据卷
数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。类似于Linux下对目录进行的mount操作

1.1 在容器中创建数据卷,同时挂载主机目录
在docker run命令中使用-v选项可以在容器内创建数据卷;
多次使用-v选项可创建多个数据卷;
使用–name选项可以给容器创建一个友好的自定义名称。
语法:docker run -d -v 宿主机目录绝对路径:数据卷 --name 友好名称 镜像名称 执行命令
[root@localhost ~]# touch /mnt/{1…5}.txt

在容器中创建数据卷,同时挂载主机目录
[root@localhost ~]# docker run -v /mnt:/mnt -itd --name www centos /bin/bash
(3)报错问题解决方法
如果yum语句无法执行的话,并且报以下警告:
[Warning] IPv4 forwarding is disabled. Networking will not work.
这个问题是由于IPv4转发被禁用了,导致无法上网,需要将IPv4转发开启
解决方法:
vim /usr/lib/sysctl.d/00-system.conf
添加如下内容
net.ipv4.ip_forward=1
重启network服务
systemctl restart network

1.2 进入容器中查看挂载情况
[root@localhost ~]# docker exec -it www /bin/bash
[root@localhost ~]# docker inspect www //查看容器信息


“Mounts”: [
{
“Type”: “bind”,
“Source”: “/mnt”,
“Destination”: “/mnt”,
“Mode”: “ro”,
“RW”: false,
“Propagation”: “rprivate”
}
]
(二)数据卷容器
2.1数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用
2.2挂载数据卷容器中的数据卷到新的容器

练习:将数据卷容器www共享给data容器使用

–volume-from 挂载数据卷容器的数据卷使用

在新建容器data中挂载数据卷容器www的数据卷/mnt使用
[root@localhost ~]# docker run -itd --volumes-from www --name data centos

进入容器data验证是否有共享数据
[root@localhost ~]# docker exec -it data /bin/bash

[root@ce58b8d7ee87 /]# ll /mnt
(一)端口映射—端口映射机制将容器内的服务提供给外部网络访问
启动容器时,不指定对应的端口,在容器外无法通过网络访问容器内的服务

可随机或指定映射端口范围

-P ---------大写P,开启随机端口

-p 宿主机端口:容器端口 -----指定映射端口

例:
docker run -d -P httpd:centos
docker run -d -p 49888:80 httpd:centos
练习:
docker run -d -P --name test1 apache:ly
docker ps -a
docker run -d -p 8888:80 --name test2 apache:ly
docker ps -a

(二)容器互联
通过容器名称在源容器和接收容器间建立一条网络通信隧道,接收容器可以看到源容器指定的信息。
语法:使用docker run命令–link选项实现容器间互联通信
–link name:alias
name—连接容器名称(此名称有唯一性)
alias—连接的别名
实现容器互联
1.创建源容器
docker run -d -P --name web1 apache:ly

2.创建接收容器
docker run -d -P --name web2 --link web1:web1 apache:ly

3、测试容器互联

docker exec -it web2 /bin/bash

ping web1

此时,接收容器web2和源容器web1已经建立互联关系,是一个安全隧道,不暴露端口到宿主机,从而避免了暴露端口到外部网络。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值