docker操作记录
搜索images中包含mysql的镜像
1 | docker search mysql |
获取mysql镜像,且指定其tag为5.7.22
1 | docker pull mysql:5.7.22 |
查看当前已pull的本地的images(镜像)
1 | docker images |
运行一个mysql容器,将容器的3306端口映射到本机的3308端口
-d: Run container in background and print container ID
-p: Publish a container’s port(s) to the host
-e: Set environment variables
–name string: Assign a name to the container1
docker run --name dev2-mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=my_db -p 3306:3308 -d mysql:5.7.22
若容器没有运行起来,或者运行结果和期望的不一致,可以查看下log记录
logs后面可以是容器名称或者容器id1
docker logs dev2-mysql
通过执行bash登录dev2-mysql容器
-i: Keep STDIN open even if not attached
-t: Allocate a pseudo-TTY,1
docker exec -it dev2-mysql bash
列出所有容器
1 | docker ps -a |
停止、删除容器
1 | docker stop dev2-mysql |
运行容器并将一个本地目录映射到容器中。
-v: Bind mount a volume1
docker run -d --name mynginx -p 8080:80 -v /d/ysp:/usr/share/nginx nginx
查看当前运行中的容器占用的系统资源
–no-stream: Disable streaming stats and only pull the first result1
docker stats --no-stream
根据DockerFile文件创建一个镜像,注意最后有个“.”
-t: Name and optionally a tag in the ‘name:tag’ format1
docker build -t dao-2048 .
查看构成一个mysql镜像的所有的镜像层(包括每一层镜像的大小和形成该层镜像的命令)
Dockerfile的每一行代码都会形成一个镜像层1
docker history mysql
有个坑,关于-v挂载目录。
下面这行代码启动的容器,启动后一分钟内就会自动stop,后面经过尝试,发现是挂载到/usr/share
的原因,该文件夹是已经存在且包含了许多文件的,挂载到该目录导致出错了,改为/usr/share/work
就好了,docker会自动新建work文件夹。1
docker run --name mysql -v /d/work:/usr/share ...后面省略
查看一个docker容器或镜像的信息(Return low-level information on Docker objects)
1 | docker inspect mynginx |
关于用Dockerfile初始化mysql数据的坑
Dockerfile中没有定义CMD的时候,mysql会自动启动,定义了CMD的时候,mysql需要用自己用命令启动————这个是我尝试了好久才得出来的结论。
也就是说,如果自己的Dockerfile没有定义CMD,FROM的镜像的Dockerfile中的CMD会被调用,而因为镜像中包含了mysql,CMD命令中一般都会写好它的启动命令。
也就是说,假如我的Dockerfile写了CMD命令,其中就必须包含有启动数据库的命令,否则数据库没起来,就像我一样,懵逼老久。
数据库启动命令根据不同版本有所不同,我找到了以下两种不同的命令,我使用的是ubuntu下的mysql:5.7.22,启动命令为版本一的:1
2
3
4
5
6
7# 版本一
chown -R mysql:mysql /var/lib/mysql
mysqld --user=mysql &
# 版本二
chown -R mysql:mysql /var/lib/mysql
mysql_install_db --user=mysql > /dev/null
mysqld_safe --user=mysql &
运行centos容器的命令有所不同
官方的centos镜像没有设置启动命令,需在最后定义启动命令/bin/bash,否则无法创建容器或创建后启动又会马上停止运行。1
docker run -itd --name centos centos:6.6 /bin/bash