docker安装linux镜像制作,制作镜像(含centos上docker安装)

------------------------------------预备:安装docker-ce------------------------------------------------------

1、安装依赖

docker依赖于系统的一些必要的工具,可以提前安装。

yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加软件源

3、安装docker-ce

yum clean all

yum makecache fast

yum -y install docker-ce

4、启动服务

通过systemctl启动服务

systemctl start docker

------------------------------------开始制作镜像------------------------------------------------------

docker pull percona:5.7-centos

然后 创建 Dockerfile:

FROM percona:5.7-centos AS runtime

LABEL maintainer="lantianyun@66law.cn"

#必须加上这句,不然后面的yum会报没有权限

USER root

#添加python包(自动解压)

ADD pkg.tar.gz /usr/local

#删除压缩包

RUN rm -f /usr/local/*.tar.gz

RUN yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel sqlite-devel tk-devel db4-devel libpcap-devel libffi-devel

RUN yum -y install wget

RUN wget --no-check-certificate https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

RUN rpm -Uvh ./*.rpm --nodeps --force

# 解压python3安装包

RUN tar -zxvf Python-3.7.2.tgz

# 进入python3安装包目录

RUN cd Python-3.7.2

# 将python3安装在这个目录

RUN ./configure --prefix=/usr/local/python3

# 编译和安装

RUN make && make install

# 创建python3软连接

RUN ln -s /usr/local/python3/bin/python3 /usr/bin/python3

# 创建pip3的软连接

RUN ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

1946a22171ca

没有用root用户执行,权限错误

加上USER root以后,

继续build又报错:

No space left on device

1946a22171ca

No space left on device

只好重新把docker的deamon配置改了,放在新的磁盘上。这不是重点,这里掠过。

把以下配置放在docker-compose.yml中:(注意缩进和分隔,冒号后面必须有空格)

mysql:

image: percona:5.7-centos

restart: always

volumes:

- /data/percona_template/ltmy.cnf:/etc/my.cnf.d/ltmy.cnf

- /data/percona_template/log:/var/log/mysql

ports:

- "3308:3306"

environment:

MYSQL_ROOT_PASSWORD: "123asd"

然后启动容器:(这句话要在compose文件所在的目录下执行)

docker-compose up -d

之后按照Dorckerfile进行一系列的安装

直到有一步骤报错:Failed to get D-Bus connection: Operation not permitted

就是在systemctl 或 service 对mysql进行启停的时候,报的.

网上查到的解决方案是要重新用一种方式run:

docker run -d -it --privileged percona_template_mysql_1 /usr/sbin/init

然后把已经有的容器生成新的镜像提交

docker commit -m "centos_with_mysql_python" -a "lantianyun@66law.cn" percona_template_mysql_1 percona_with_python

其中percona_template_mysql_1是已有容器名,percona_with_python是要生成的镜像名

1946a22171ca

新生成的镜像

然后一直报错说找不到systemctl,没有systemctl就不能方便得在docker内部启停mysql.百度基本上是如下方案:

1.启动(run)镜像时候 -v /sys/fs/cgroup:/sys/fs/cgroup:ro /usr/sbin/init

2.在dockerfile中添加cmd ["/usr/sbin/init"]

但各种尝试,都报错.最常见的是这个错误:

Failed to mount tmpfs at /run: Operation not permitted

[!!!!!!] Failed to mount API filesystems, freezing.

1946a22171ca

报错

无数次尝试以后,终于得知在启动的时候,不用-it,改用-d成功.:

docker run -p 3307:3306 --name mypy57 -e MYSQL_ROOT_PASSWORD=123asd -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged mypy:57 /usr/sbin/init

docker exec -it -u root [容器名] bash

进去以后,测试了systemctl start/stop/status mysql 可以用.只是mysql 不能登录了. 用修改配置文件增加skip-grant-tables的办法修改了密码,并grant privileges,终于mysql可用了.

用下面的语句重新生成镜像:

docker commit -m "centos7_with_mysql57_python3" -a "lantianyun@66law.cn" mypy57 cmp:7573

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值