系统制成docker镜像_手动制作Docker镜像

手动制作Docker镜像

1. 下载运行操作系统的容器

docker pull centos:7 # 可以查看 Docker Hub 官方以取得名称

docker run -it --name centos7 centos:7

2. 换源并安装对应软件

此处换为阿里云的源(同时更换 yum 和 epel)

此处安装 mysql 和 httpd

安装mysql

见下面的额外内容

安装httpd

yum install httpd

安装网络工具(netstat 等)

yum install net-tools

使用命令 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 修改时区为东八区

3. 将容器保存为镜像

docker commit

最后运行该镜像(启动对应服务的命令,并阻塞),如:

docker run -d -p 81:80 nginx -g 'daemon off;'

apache 为 httpd -D FOREGROUND

如果一次需要执行多个命令,可以写成一个脚本并执行脚本。

额外内容 - 在 Docker的 CentOS 中安装 mysql

本来以为是个很简单的过程居然折腾了这么久,之前部署云服务器时也没有好好地记录,因此记录下。

简要注意点:首次登陆修改密码、允许从任意 ip 以 root 身份登陆、开启关闭服务

之后使用:rpm -ivh mysql57-community-release-el7-9.noarch.rpm 安装源

使用 yum install mysql-server 安装,并启动 mysqld --user root (由于云服务器默认使用root)。此时可能立刻停止后退出,并报 Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 错误,查看配置文件 /etc/my.conf,发现 datadir=/var/lib/mysql,因此使用 mysqld --initialize --user=mysql --datadir=/var/lib/mysql。如果提示目录中已经有数据,则删除目录后重建即可。

使用 cat /var/log/mysqld.log | grep password 查看临时密码,登陆后修改密码。如果提示密码不合要求,用 set global validate_password_policy=LOW; 降低密码要求

设置允许 root 从任意 ip 登陆

use mysql;

select user, host from user;

update user set host = '%' where user = root; # 原值为localhost

flush privileges;

亦可使用:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;

flush privileges;

其中 “ *.* ” 代表所有资源所有权限, “ 'root'@% ” 其中 root 代表账户名,% 代表所有的访问地址,也可以使用一个唯一的地址进行替换,只有一个地址能够访问。如果是某个网段的可以使用地址与%结合的方式,如 10.0.42.%。IDENTIFIED BY 'root',这个 root 是指访问密码。WITH GRANT OPTION 允许级联授权。

切记无论什么时候一定要搞清命令的含义再执行!!!

鄙人就是因为没有搞清楚此条命令的含义,照抄照搬。别人的 写 “root” 我也跟着写 “root”,自然搞得一团糟而且登陆不上去。

这和萌萌新(本人萌新23333)照抄群里的 rm -rf / 有什么区别 ???

启动 mysql 服务。有两种方式,但必须组合使用,不能混用:

使用 systemctl (针对CentOS 7.0及以上版本,7.0 以下版本使用 service 命令)

systemctl start mysqld

systemctl stop mysqld

使用 mysql 程序自带的命令

# 由于云服务器默认root登陆,需要加上 --user root

# & 号表示后台运行,否则会阻塞

mysqld start --user root &

mysqladmin -u root -p shutdown

终于完成!

额外内容 - 原先的启动 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 启动(如文章开头所述)

参考:

mysql的安装

标签:安装,手动,使用,user,https,mysql,镜像,Docker,root

来源: https://www.cnblogs.com/battor/p/build_docker_image_by_manual.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值