docker创建容器
- 下载镜像
$ docker pull 镜像名
例如:
默认版本
$ docker pull mysql
指定版本
$ docker pull mysql:8.0.17
- 创建mysql容器
docker run -it -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8.0.17 /bin/bash
现在就是在mysql容器中了,可以输入 mysql -u root -p 进入mysql了
但是这里会报错,当时也是在网上看了各种方法都没用,后来自己看了mysql镜像的dockerfile,发现里面有几条CMD的命令,因为我们在创建容器时结尾加上了 /bin/bash ,
这命令会覆盖掉dockerfile里面的CMD命令,导致mysql容器少了一些东西
- 将创建mysql容器的命令改为:
$ docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8.0.17
为什么不用-it呢,因为我试了之后会在一个地方卡住,但是容器还创建成功了,所以索性直接用 -d
-it以及-d会在下面介绍是什么意思
- 进入容器
$ docker exec -it mysql /bin/bash
- 进入mysql
$ mysql -u root -p
一般来说用docker创建mysql不是很安全,万一docker崩了里面的数据也就没了,所以建议在创建命令的时候加上-v挂载目录,在下面我会细说
- 当进入mysql有可能会发现没法输入中文,我查看资料说的是编码格式的问题,但是容器内没有vim编辑器,也还有一种办法,在启动的时候设置编码,另一种办法在文章末尾
$ docker exec -it mysql env LANG=C.UTF-8 /bin/bash
docker 文件挂载
- 创建数据卷:
$ docker volume create 数据卷名
例如
$ docker volume create vol_mysql
- 删除数据卷
$ docker volume rm 数据卷名
- 查看数据卷的位置
$ docker inspect vol_mysql | grep vol
Mountpoint后面就是创建的数据卷的位置
- 创建容器并将数据卷挂载到容器中(这里我们用busybox镜像)
$ docker run -it --name busybox -v /var/lib/docker/volumes/vol_mysql/_data:/volbusybox busybox
-
在宿主机下进入数据卷的位置创建文件
-
回到容器查看在容器内创建的文件是否有数据
反过来也可以,在容器内创建数据,宿主机也会有数据
- 数据挂载成功
docker 端口映射
- 运行一个镜像容器
$ docker run -it -p 8070:8080 -v /root/mysql:/mysql --privileged=true busybox
-
-it 创建一个交互式的容器
-
-p 映射端口8070 本机的端口 映射的容器的端口
-
-v 挂载目录/root/mysql 本地目录 /mysql容器目录,在创建前容器是没有mysql目录的,docker 容器会自己创建
-
–privileged=true 关闭安全权限,否则你容器操作文件夹没有权限
由于创建容器的时候没有指定名字,所以容器会给你一个自定义名字,docker ps 查看
docker cp命令
- 将宿主机下的目录或文件拷贝到容器中
$ docker cp /root/project/ f88d45e473d0:/
$ docker cp /root/apt.conf f88d45e473d0:/
- 在容器内查看
- 将容器内的文件拷贝到宿主机中
$ docker cp f88d45e473d0:/var /root
重启docker服务,正在运行的容器全都关闭,解决方法
- 在创建容器时加入参数:–restart=always
$ docker run -d --restart=always --name bu busybox
- 更改配置
$ vim /etc/docker/daemon.json
加入
"live-restore": true
不建议使用,此配置文件影响全局
docker容器内安装vim等工具
- 最近使用mysql容器出现了问题,需要使用vim去更改一些配置文件
- 第一步
$ apt-get update
如果这里报错了,那就和我一样了,网上办法都试了,依然没有解决办法,索性跳过这个错误,我不用容器的vim了,重新创建容器挂载文件
$ docker run -d --privileged=true --name mysql -e MYSQL_ROOT_PASSWORD=123465 -v /root/my.cnf:/etc/mysql/my.cnf mysql:8.0.17
如果只是要修改my.cnf的配置文件,就先在宿主机下/root将my.cnf配置好,之后再挂载到容器里面my.cnf的位置,如果需要修改多个,可以再写多个-v去挂载文件。