利用Dockerfile创建镜像并生成容器
创建Dockerfile(以mysql 5.7为例)可以从Docker Hub上下载官方Dockerfile,以及docker-entrypoint.shDockerfile内容如下:FROM debian:jessie# add our user and group first to make sure their IDs get assigned consistently, regard
·
- 创建Dockerfile(以mysql 5.7为例)
可以从Docker Hub上下载官方Dockerfile,以及docker-entrypoint.sh
具体内容太长,还是在Docker Hub上看的吧 - 创建镜像
进入到Dockerfile目录,执行下面的命令:
docker build -t mysql .
注意后面的的点,表示在当前目录。
创建完之后,就可以通过docker images
,看到刚创建的镜像了。
这里可以看到生成了两个镜像,一个是mysql的,一个是基础镜像:debian, - 生成容器
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用户的密码 - 进入容器
执行命令docker exec -it mymysql /bin/bash
进入容器。
显示的主机名即为容器ID:
docker exec参数说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开 (小白不懂啥意思,貌似就是可交互的意思)
-t :分配一个伪终端(tty) - 期间遇到的问题
生成容器的过程中总是报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,终于可以了。
更多推荐
已为社区贡献2条内容
所有评论(0)