------------------------------------预备:安装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
没有用root用户执行,权限错误
加上USER root以后,
继续build又报错:
No space left on device
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是要生成的镜像名
新生成的镜像
然后一直报错说找不到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.
报错
无数次尝试以后,终于得知在启动的时候,不用-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