Docker 学习笔记
使用动机
Docker 容器是一种轻量级的应用部署、运行单元,历经几代发展,今天发现Windows 10 家庭版不再需要依赖Visualbox,只要安装好WSL即可使用,启动和运行均非常便捷,因此想把学习使用的经历记录下来,以便后续回顾。
目标是在本地建立开发所需要的各种依赖,使用最省的资源,提升开发效率。
基本使用命令
搜寻镜像
docker search –no-trunc xxx
no-trunc 的选项可以不截断结果中的文字。比如Description过长,默认会被截断。
下载镜像
docker pull image-name
列举本地镜像
docker image ls
运行镜像
1 | docker run --itd --name *name_of_a_new_container* -p6379:6379 *image_name* |
-p端口映射相应说明可以参考这个网站
如果遇到运行时报名字冲突,证明已经创建过相应名字的容器了。此时需要通过start启动容器
1 | docker start -a image_name #-a指attach到stdin/stderr,可以在命令行中看到连接后的容器输出 |
停止docker镜像
1 | docker stop image_name |
docker rm image_name 删除掉容器,再重建。
查询当前运行的镜像
docker ps 显示运行的镜像
显示所有已经创建的镜像
1 | docker ps -a |
实战
运行一个redis容器
1 | docker pull redis |
可以通过如下命令看本机端口是不是被打开(状态为LISTENING,windows环境)
1 | netstat -na | find "6379" |
可以尝试通过redis客户端或者telnet操作下redis
1 | telnet localhost 6379 #quit命令退出 |
运行一个Mysql 容器
mysql容器运行方法与redis大同小异,如果启动失败,比如通过 docker ps -a看到异常终止,则可通过如下命令查看日志:
1 | docker logs container_name |
比如,我运行mysql失败,产生了如下日志:
2020-12-02 16:14:17+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.22-1debian10 started.
2020-12-02 16:14:17+00:00 [Note] [Entrypoint]: Switching to dedicated user ‘mysql’
2020-12-02 16:14:17+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.22-1debian10 started.
2020-12-02 16:14:17+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
显然,需要提供更多参数以便运行mysql,如日志所述,可以运行如下命令设置一个root密码
1 | docker run --name=mysql_server -e MYSQL_ROOT_PASSWORD=12345 -p3306:3306 -p33060:33060 -d mysql |
之后,即可通过如下命令登录容器。
3306是经典的mysql端口,其他可用端口可以参考如下链接Mysql Ports Reference
1 | docker -it mysql_server /bin/bash |
今日遗留问题
- 如何改变容器中的配置,比如更改redis的默认运行port?
- 数据在容器停止时似乎没有丢失,如果是容器意外退出呢?
- 已经创建的容器,如果需要改变本地映射端口,应该怎么做?