docker容器-实战(分享十六)
前面一节主要是熟悉docker基本操作,本分享就进行介绍一些实战案例,实战才是王道。下面就通过常用的应用进行实战介绍
一、操作系统(CentOS)
docker search centos
docker pull centos
docker run –it centos(启动一个容器)
二、创建支持SSH服务的镜像
docker run –it ubuntu /bin/bash(通过镜像来创建一个容器)
apt –get update 更新软件源信息
apt-get install openssh-server 安装和配置SSH 服务
然后vi编辑sshd
创建容器方式:commit和dockerfile
cmmit:
保存镜像:docker commit fc1 sshd:ubuntu
使用镜像:docker run –p 10022::22 –d sshd:ubuntu /run.sh
查看启动:docker ps
dockerfile
1.创建工作目录:mkdir sshd_ubuntu
2.cd ssh_ubuntu
3.touch sshd_ubuntu
4.touch dockerfile run.sh
5.编辑run.sh
#!/bin/bash
/usr/sbin/sshd –D
创建authorized_keys:
ssh-keygen –t rsa
cat ~/.ssh/id_rsa.pub >authorized_keys
6.编写Dockerfile
ockerfile一般包含下面几个部分:
基础镜像:以哪个镜像作为基础进行制作,用法是FROM 基础镜像名称
维护者信息:需要写下该Dockerfile编写人的姓名或邮箱,用法是MANITAINER 名字/邮箱
镜像操作命令:对基础镜像要进行的改造命令,比如安装新的软件,进行哪些特殊配置等,常见的是RUN 命令
容器启动命令:当基于该镜像的容器启动时需要执行哪些命令,常见的是CMD 命令或ENTRYPOINT
在本节实验中,我们依次先把这四项信息填入文档。Dockerfile中的#标志后面为注释,可以不用写,另外实验楼的环境不支持中文输入,比较可惜。
依次输入下面的基本框架内容:
# Version 0.1# 基础镜像 FROM ubuntu:latest# 维护者信息 MAINTAINER shiyanlou@shiyanlou.com# 镜像操作命令 RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean# 容器启动命令 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
7.创建镜像
cd sshd_ubuntu
docker build –t sshd:dockerfile
如果出现了“successfully built XXX字样。
8.测试镜像,运行容器
docker run –d –p 10122:22 sshd:dockerfile
三、web服务器与应用
apache:
在宿主机上准备的文件清单:
Dockerfile
#启动ssh和apache服务的角本
run.sh
以上文件都放到/root/apache_centos目录下
mkdir -p /root/apache_centos
cd /root/apache_centos
基础镜像:以镜像centos为基础的开放SSH服务的镜像
[root@localhost apache_centos]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
sshd dockerfile 411d5fb16366 23 hours ago 278 MB
centos latest 0f73ae75014f 5 weeks ago 172.3 MB
一、准备run.sh文件
在/root/apache_centos目录新建run.sh
vim run.sh
内容如下:
#!/bin/bash
/usr/sbin/sshd &
/usr/local/apache2/bin/httpd -D FOREGROUND
- 1
- 2
- 3
二、准备Dockerfile
在/root/apache_centos目录新建Dockerfile
vim Dockerfile
- 1
文件内容如下:
#新生成的镜像是基于sshd:dockerfile镜像
FROM sshd:dockerfile
MAINTAINER by Steven
#安装wget
RUN yum install -y wget
WORKDIR /usr/local/src
#下载并解压源码包
RUN wget http://apache.fayea.com/httpd/httpd-2.4.17.tar.gz
RUN tar -zxvf httpd-2.4.17.tar.gz
WORKDIR httpd-2.4.17
#编译安装apache
RUN yum install -y gcc make apr-devel apr apr-util apr-util-devel pcre-devel
RUN ./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-so
RUN make
RUN make install
#修改apache配置文件
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /usr/local/apache2/conf/httpd.conf
#启动apache服务
RUN /usr/local/apache2/bin/httpd
#复制服务启动脚本并设置权限
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh
#开放80端口
EXPOSE 80
CMD ["/usr/local/sbin/run.sh"]
需要注意的是:在Dockerfile文件中更换当前目录不可以用“cd”命令,而要改用“WORKDIR”.
三、生成镜像
docker build -t apache_dockerfile:centos .
- 1
查看生成的镜像:
[root@localhost apache_centos]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
apache_dockerfile centos f8f30b4a0ee8 24 minutes ago 440 MB
apache centos f92c55dddd07 17 hours ago 423.9 MB
sshd dockerfile 411d5fb16366 23 hours ago 278 MB
centos latest 0f73ae75014f 5 weeks ago 172.3 MB
四、根据镜像生成的容器并进行测试
1、生成新的容器
docker run -d -p 2222:22 -p 8000:80 apache_dockerfile:centos /usr/local/sbin/run.sh
- 1
将容器的22端口和80端口分别映射到到宿主机上的2222端口和8000端口,并运行服务脚本。
2、查看新生成的容器:
[root@localhost apache_centos]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae560e497f39 apache_dockerfile:centos "/usr/local/sbin/run 45 seconds ago Up 44 seconds 0.0.0.0:2222->22/tcp, 0.0.0.0:8000->80/tcp condescending_bardeen
6490cd244c10 apache:centos "/usr/local/apache2/ 17 hours ago Exited (0) 17 hours ago loving_wright
673e946b57e4 sshd:dockerfile "/usr/local/sbin/run 18 hours ago Exited (137) 17 hours ago reverent_bell
3、测试
测试apache
[root@localhost apache_centos]# curl localhost:8000
<html><body><h1>It works!</h1></body></html>
成功!
测试ssh
[root@localhost apache_centos]# ssh localhost -p 2222
root@localhost's password:
成功!
转载于:https://www.cnblogs.com/zywu-king/p/8059788.html
docker容器-实战(分享十六)相关推荐
- Docker容器实战-容器的网络及数据
一.容器的网络 1. 容器自带网络 当Docker安装成功后,就会创建三种网络,通过docker network ls可以查看 这三种网络就是系统自带的,在创建容器时可以通过--net指定,详细信息在 ...
- Vue实战篇十六:导航菜单
系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...
- LiveVideoStack线上交流分享 (十六) —— 爱奇艺剧场直播云端混流方案
如今网络直播如火如荼,剧场直播是其一个应用分支,主播在观看点播视频时的同时做出评述,观众端同步观看点播和主播评述的混合视频流.今晚 7:30 ,LiveVideoStack线上交流分享第十六期,我们邀 ...
- Docker容器实战思维
Docker成功的基础 Docker的实现用到的基础技术(cgroups, namespace,分层文件系统)在Docker之前已经存在很多年,并且 Linux Containers(LXC)也在很多 ...
- 使用prometheus+grafana+cadvisor架构监控docker容器实战
前言 本次实验包括两个内容: 1.使用docker原生命令和Linux shell脚本结合的传统方式,对容器进行监控: 2.采用云原生监控利器prometheus对docker容器进行监控: 文章收录 ...
- Docker容器技术介绍(六)--- 端口映射和容器间互访问
端口映射 默认情况下,宿主机是无法访问容器内部网络的,但是可以使用端口映射来解决这个问题,在之前文章中已经提到过Docker的端口映射.主要通过docker run 跟 -P(大写) 或 -p(小写) ...
- 应用程序框架实战三十六:CRUD实战演练介绍
从本篇开始,本系列将进入实战演练阶段. 前面主要介绍了一些应用程序框架的概念和基类,本来想把所有概念介绍完,再把框架内部实现都讲完了,再进入实战,这样可以让初学者基础牢靠.不过我的精力很有限,文章进度 ...
- Docker 容器的通信(十二)
一.容器间通信 1.IP 通信 两个容器要能通信,必须要有属于同一个网络的网卡.满足这个条件后,容器就可以通过 IP 交互了.具体做法是在容器创建时通过--network指定相应的网络,或者通过doc ...
- Docker容器实战(四) - 纷纷扰扰,终归尘土
伴随着Docker公司的容器技术生态在云计算市场中站稳了脚跟,围绕着Docker项目进行的各个层次的集成与创新产品,也如雨后春笋般出现在这个新兴市场当中. 而Docker公司,不失时机地发布了Dock ...
最新文章
- 打开word出现“您正试图运行的函数包含有宏或需要宏语言支持的内容。”的解决方法
- Hexo博客NexT主题美化之评论系统
- python mysql索引 优化神器explain 慢查询
- macpro如何清理磁盘空间_如何正确的清理C盘
- appweb ejs_具有快速路线的EJS
- Linux内核驱动如何编写?我们先从字符驱动入门开始
- jsp 页面中文乱码解决(笔记)
- Teradata的通吃法:同时飘忽于AWS和微软Azure之上
- Linux(centos7.4)上FTP服务器搭建(使用yum)
- Android 打aar包
- bzoj2286: [Sdoi2011消耗战
- php对接微信调用不到头像,【微信公众号小程序】微擎获取用户头像失败的问题如何处理— 亲测 可用 持续更新...
- 博士申请 | 澳门科技大学李楠楠老师组招收2022秋季入学全奖博士生
- php对联广告,对联广告
- rgb 接口lcd 驱动调试
- java验证身份证合法性_Java安全性,第2部分:身份验证和授权
- Java实现凑硬币或者最少硬币数
- Google教我如何定制自己的View
- 矩阵分析——Jordan标准形
- 【四分之四拍】四分之四拍每拍实际占多长时间?【用最理科的方式解释音乐里的这些玩意,不对之处欢迎指正】