前言

从基础部分,从头入门docker的学习笔记



正文


先附上一些后面会用到的常用命令

docker 常用命令
  1. # docker 容器运行进程和端口
  2. docker ps -a
  3. # docker 状态
  4. docker stats
  5. # 执行一个docker 镜像
  6. docker run [imageId]
  7. # 后台运行一个docker 镜像
  8. docker run -d [imageId]
  9. # 指定端口运行一个docker镜像(前面是宿主机端口,后面是容器端口)
  10. docker run -p 13306:3306 [imageId]
  11. # 限制内存 100M 禁止内存溢出时杀死进程 允许且不限制使用交换区
  12. docker run -m 100M --oom-kill-disable --memory-swap=-1 [imageId]
docker 容器的开机自启动

其中最后一个参数,对应的是container中的name

  1. docker update --restart=always redis
  2. docker update --restart=always mysql
  3. docker update --restart=always mongo
docker images 镜像
  1. docker images
  2. # 如果存在的话 清除之,id用前三位
  3. docker rmi a12
docker container 容器
  1. # 查看容器列表
  2. docker container ls -a
  3. # 停止容器运行
  4. docker container stop [containerId]
  5. # 删除容器
  6. docker container rm [containerId]
  7. # 查看容器运行日志
  8. docker logs [containerId]
docker volume
  1. # 清理数据卷(无关联container的volume)
  2. docker volume rm $(docker volume ls -qf dangling=true)


mysql 5.7

先从折腾一个mysql开始。

  1. # 先拉一个官方版本的mysql5.7
  2. docker pull mysql:5.7

这时候是直接启动不了的,因为没给mysql设置默认的root的密码。
启动会报
error: 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_PASSWORD1
意思就是必须先设置个账号密码

参考:
https://www.runoob.com/docker/docker-install-mysql.html
https://blog.csdn.net/weixin_40461281/article/details/92610876

  1. # 命令和说明
  2. # 1. 密码改成你自己的
  3. # 2. 端口避免已占用
  4. # 3. 事先新建好conf logs data文件夹
  5. # 4. 这里顺便附带了限制内存最大200M的部分,不需要可以去除
  6. docker run -d -p 3306:3306 --name mysql -v /home/zzzmh/docker/mysql57/conf:/etc/mysql/conf.d -v /home/zzzmh/docker/mysql57/logs:/logs -v /home/zzzmh/docker/mysql57/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='root' -m 200M --oom-kill-disable --memory-swap=-1 mysql:5.7
  7. # 返回
  8. 21cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e
  9. runoob@runoob:~/mysql$

意思是

  • -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
  • -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
  • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
  • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
  • -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码。

检查是否成功

  1. # 命令
  2. docker ps -a
  3. # 返回
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. cd7d8d5e4c98 mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp mymysql

基本完成安装mysql
可以使用navicat连接进行操作



mongodb 3.4.20 && redis

同mysql mongodb流程也是差不多

  1. # 先看下有没有
  2. docker search mongo
  3. # 拉个镜像
  4. docker pull mongo:3.4.20
  5. # 启动镜像
  6. docker run -d -p 27017:27017 -m 100M --oom-kill-disable --memory-swap=-1 --name mongo mongo:3.4.20

redis基本和mongo一样

  1. docker pull redis
  2. docker run -d -p 6379:6379 -m 100M --oom-kill-disable --memory-swap=-1 --name redis redis


tomcat && nginx


准备部分

说明:这两个和之前的区别在于,需要有文件和文件夹是映射到宿主机上的
其中-v 对应的本地的文件夹,需要提前创建
例子:

  1. # 要把tomcat3个关键的配置文件挂载出来,就必须是先运行一个纯容器不挂载的tomcat
  2. # 例如
  3. docker run -d -p 8080:8080 --name tomcat tomcat
  4. # 进入这个tomcat,通过ls pwd cd等命令,找到容器中的配置文件绝对路径
  5. # 之后就可以用以下命令,把这三个配置文件的默认内容给复制到准备好的空文件夹里
  6. docker cp tomcat:/usr/local/tomcat/bin/catalina.sh /home/zzzmh/docker/tomcat/conf/
  7. docker cp tomcat:/usr/local/tomcat/conf/server.xml /home/zzzmh/docker/tomcat/conf/
  8. docker cp tomcat:/usr/local/tomcat/conf/web.xml /home/zzzmh/docker/tomcat/conf/
  9. # 最后安装的时候才可以正常的以文件对文件的方式,实现挂载
  10. # 补充下 如果是文件夹对文件夹的方式挂载,除非是是可以为空的文件夹,否则也要这样先准备好这个文件夹里的所有的文件
  11. # 正式docker run之前,建议清理掉这个测试的run
  12. docker container stop tomcat
  13. docker container rm tomcat
  14. # nginx也是同理,需要 nginx.conf 和 default.conf
  15. # 命令:略~

安装部分

  1. # tomcat
  2. docker pull tomcat
  3. docker run -d -p 8080:8080\
  4. -v /home/zzzmh/docker/tomcat/logs:/usr/local/tomcat/logs\
  5. -v /home/zzzmh/docker/tomcat/webapps:/usr/local/tomcat/webapps\
  6. -v /home/zzzmh/docker/tomcat/conf/web.xml:/usr/local/tomcat/conf/web.xml\
  7. -v /home/zzzmh/docker/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml\
  8. -v /home/zzzmh/docker/tomcat/conf/catalina.sh:/usr/local/tomcat/bin/catalina.sh\
  9. -m 500M --oom-kill-disable --memory-swap=-1\
  10. --name tomcat\
  11. tomcat
  12. # nginx
  13. docker pull nginx
  14. docker run -d -p 80:80\
  15. -v /home/zzzmh/docker/nginx/logs:/var/log/nginx\
  16. -v /home/zzzmh/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf\
  17. -v /home/zzzmh/docker/nginx/conf/conf.d/:/etc/nginx/conf.d\
  18. -v /home/zzzmh/docker/nginx/html:/usr/share/nginx/html\
  19. -m 100M --oom-kill-disable --memory-swap=-1\
  20. --name nginx\
  21. nginx

操作部分

nginx 简单操作

在之前的/home/zzzmh/docker/nginx/html
新建一个文件
index.html

  1. <html><body><h1>Docker YES !!!</h1><body><html>

访问:
http://localhost

效果:

tomcat 简单操作

在之前的/home/zzzmh/docker/tomcat/webapps
新建一个文件夹 test
文件夹中新建一个文件
index.jsp

  1. <html><body><h1><%out.println("Docker NB !!!");%></h1></body></html>

访问:
http://localhost:8080/test/

效果: