手动制作Docker镜像
手动制作 Docker 镜像
前言
a. 本文主要为 Docker的视频教程 笔记。
b. 环境为 CentOS 7.0 云服务器(用来用去感觉 Windows 的 Docker 出各种问题,比如使用 --privileged 和 /usr/sbin/init 会直接出错暂停,因此还是使用 Linxu 操作系统的云服务器了,不过之前的内容在 Linux 下也都适用)
c. 上一篇:Docker命令注意点
d. 过了N久以后突然想到,在 Docker 容器里面直接安装数据库的情况似乎并不多见,而是更倾向于直接使用数据库的容器。因为整个服务平台需要的是一套数据库而不是每个容器搞一套。本文仅作为使用容器技术的演示,作为生产环境的部署方案是极不合适的。本例中安装 mysql 就当是自己的一些尝试吧(还有踩坑,擦)
1. 下载运行操作系统的容器
docker pull centos:7 # 可以查看 Docker Hub 官方以取得名称
docker run -it --name centos7 centos:7
2. 换源并安装对应软件
此处换为阿里云的源(同时更换 yum 和 epel)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
此处安装 mysql 和 httpd
安装mysql
安装httpd
yum install httpd
安装网络工具(netstat 等)
yum install net-tools
使用命令 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 修改时区为东八区
3. 将容器保存为镜像
docker commit <CONTAINER_ID> <CUSTOM_CONTAINER_NAME>
最后运行该镜像(启动对应服务的命令,并阻塞),如:
docker run -d -p 81:80 <名称> nginx -g 'daemon off;'
apache 为 httpd -D FOREGROUND
如果一次需要执行多个命令,可以写成一个脚本并执行脚本,如:
#!/bin/bash
mysqld --user root & # 此命令不阻塞
httpd -D FOREGROUND
额外内容 - 原先的启动 CentOS7 的 Docker 镜像方式(坑)
我原先的启动命令为:
docker run -it --privileged --name centos7 centos:7 /usr/sbin/init
因为启动时如果不加 --privileged 和 /usr/sbin/init,则无法使用 systemctl 命令来启动和停止服务。而使用此方式后,会调用 /usr/sbin/init 来加载镜像,当前窗口会直接无法操作,如下:

而保存该容器为镜像后,如果启动时不加这两个参数,则会报错:

然而比较奇怪的是,以此种方式启动的容器,安装 mysql 时不需要执行其它操作,yum install mysql 安装后就可以正常使用;且修改密码时有密码强度的验证。猜测是 mysql 安装时需要调用系统的命令执行一些服务,而不加 --privileged 和 /usr/sbin/init 无法正常使用系统服务。
因此正确的方式应为:安装软件后,使用软件本身的程序启动而不是使用 systemctl 启动(如文章开头所述)
参考:
apache 前台启动命令:
https://blog.csdn.net/weixin_44419597/article/details/104425504
CentOS换源
https://www.cnblogs.com/Chan94/p/10658756.html
后记
原本本篇的内容里还有如何在容器中安装 mysql 的内容,但感觉内容太长,耦合性太高(doge),而且这篇主要的内容是怎么把容器提交为镜像,还是拆到了另一篇博客中。这也算是有点启发吧:调用栈再长,还是要回到主函数上!
手动制作Docker镜像的更多相关文章
- Dockerfile 自动制作 Docker 镜像(一)—— 基本命令
Dockerfile 自动制作 Docker 镜像(一)-- 基本命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:手动制作Do ...
- 详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
关于<SpringBoot-2.3容器化技术>系列 <SpringBoot-2.3容器化技术>系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更 ...
- SpringBoot系列: 制作Docker镜像的全过程
本文主要参考了 https://segmentfault.com/a/1190000016449865 , 感谢作者的付出. 另外, 在本文中, 演示了Windows+Maven+Docker To ...
- 离线手动部署docker镜像仓库——harbor仓库(HTTPS)
实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...
- 制作Docker镜像的两种方式
此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...
- 体验SpringBoot(2.3)应用制作Docker镜像(官方方案)
关于<SpringBoot-2.3容器化技术>系列 <SpringBoot-2.3容器化技术>系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更 ...
- [开源]制作docker镜像不依赖linux和Docker环境
背景 最近群友们经常反馈docker镜像制作起来有点麻烦,我开源的antdeploy工具虽然可以制作镜像但是必须有一个提前:有一台安装好docker的linux服务器.因为大家开发环境基本上都是win ...
- Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化
Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ...
- Dockerfile自动制作Docker镜像(二)—— 其它常用命令
Dockerfile自动制作Docker镜像(二)-- 其它常用命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:Dockerf ...
随机推荐
- 关于:org.apache.catalina.connector.ClientAbortException及getOutputStream() has already been called for this response的异常处理
1.异常场景: 在进行将数据用word导出或者Excel导出的时候.抛出的异常getOutputStream() has already been called for this response 导 ...
- 跟我一起写 Makefile(十)
四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语 ...
- tomcat服务监控分析及自启
#! /bin/bash # process-monitor.sh serverName="/usr/local/apache-tomcat-7.0.72-8080" #获取进程i ...
- linux 磁盘IO速度测试
写入速度测试命令:time dd oflag=direct if=/dev/zero of=/data2/test bs=2k count=1000000 //if表示从哪里读取 of表示写入到哪里 ...
- labuladong 05.16 微信直播
labuladong 05.16 微信直播 一.基础: 1.校招相关 1)扫盲 秋招:8-10月 提前批:7月 暑期实习:3-5月 非必须 2)关注公司前景,部门信息,公司财报 企查查,天眼查,多获取 ...
- ReentrantReadWriteLock(读写锁)
为了提高性能,java提供了读写锁, 读锁: 在读的地方使用读锁,可以多个线程同时读. 写锁: 在写的地方使用写锁,只要有一个线程在写,其他线程就必须等待 例子: public static Read ...
- SpringBoot集成Druid
maven <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-b ...
- kafka查看Topic列表及消费状态等常用命令
环境 本文中的操作均基于kafka_1.3.3.0,且所有命令经过实际验证. 常用工具 新建Topic ./kafka-topics --zookeeper 166.188.xx.xx --creat ...
- 多线程同步AutoResetEvent 和ManualResetEvent
- 事务种类jdbc,Hibernate,JTA事务
JDBC事务 String URL="jdbc:sqlserver://localhost:1433;databaseName=test2"; String USER=" ...