1. 创建Dockerfile(以mysql 5.7为例)
    可以从Docker Hub上下载官方Dockerfile,以及docker-entrypoint.sh
    具体内容太长,还是在Docker Hub上看的吧
  2. 创建镜像
    进入到Dockerfile目录,执行下面的命令:
    docker build -t mysql .
    注意后面的的点,表示在当前目录。
    创建完之后,就可以通过docker images,看到刚创建的镜像了。
    这里写图片描述
    这里可以看到生成了两个镜像,一个是mysql的,一个是基础镜像:debian,
  3. 生成容器
    docker run --name mymysql -d mysql:latest \
    > -p 3306:3306 -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data \
    > -e MYSQL_ROOT_PASSWORD=123456

    再通过docker ps,就可以看到刚刚生成的容器:
    这里写图片描述
    参数说明:
    -p 3306:3306:将容器的3306端口映射到主机的3306端口。
    -v $PWD/conf/my.cnf:/etc/mysql/my.cnf:将主机当前目录下的 conf/my.cnf挂载到容器
    -v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
    -v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
    -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
  4. 进入容器
    执行命令docker exec -it mymysql /bin/bash进入容器。
    显示的主机名即为容器ID:
    这里写图片描述
    docker exec参数说明:
    -d :分离模式: 在后台运行
    -i :即使没有附加也保持STDIN 打开 (小白不懂啥意思,貌似就是可交互的意思)
    -t :分配一个伪终端(tty)
  5. 期间遇到的问题
    生成容器的过程中总是报RPC错误
    docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory".
    我网上查了一下,说是32位系统不兼容的问题,但是我装的是64位系统。我看是目录问题,就把docker run的-p参数去掉执行,还是报错,不过变成了docker: Error response from daemon: Container command 'docker-entrypoint.sh' not found or does not exist..,找不到docker-entrypoint.sh文件,网上查也没有找到答案。折腾了好久,才发现我的docker-entrypoint.sh没有可执行权限,于是,就chmod -x docker-entrypoint.sh,可是不知道为啥docker-entrypoint.sh还是不可执行,就直接执行了 chmod 777 docker-entrypoint.sh,终于可以了。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐