各种笔记
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
3.5 KiB

4 years ago
  1. Docker 文件 .dockerignoer 填写要排除的路径
  2. 填写 DockerFile 文本文件 填写相关打包文件和路径
  3. # 创建image文件
  4. docker image build
  5. docker image build -t koa-demo
  6. docler image build -t koa-demo:0.0.0.1 .
  7. -t 参数用来指定image文件的名字 后面的冒号指定标签 如果不指定,默认标签就是latest
  8. 最后的那个点 就是Dockerfile文件所在的路劲, . 就是当前路劲
  9. # 生成 容器
  10. docker container run 命令会从image文件生成容器
  11. docker container run -p 8000:3000 -it koa-demo /bin/bash
  12. docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
  13. -p 参数 容器的3000 端口映射到本地的8000端口
  14. -it 参数 容器的shell 映射到当前的Shell 然后你本地输入的命令就能够传入容器
  15. koa-demo:0.0.1 image文件的名字 如果有标签还需要提供标签 默认就是latest
  16. /bash/shell 容器启动之后 内部第一个执行的命令
  17. 也可以使用docker container run 命令的 --rm 参数 在容器停止后自动删除容器文件
  18. # CMD命令
  19. 在容器启动之后 需要手动输入某些命令 可以在Dockerfile里写上 这样容器启动之后就会自动执行这个命令 不用再手动输入
  20. 发布image文件
  21. # 其他有用的docker命令
  22. docker container start 新疆一个容器 每运行一次 就会新创建一个容器 同样的命令执行两次 就会生成两个一模一样的容器文件
  23. 如果是希望重复使用容器,就要使用docker container start 命令
  24. docker container start [containerId] 用来启动已经生成,已经停止的运行容器文件
  25. docker container kill 终止容器 相当于向容器发出SIGKILL信号
  26. docker container stop [containerId] 也是用来终止容器的 相当于向容器发出 SIGTERM信号 过一段时间再发出SIGKILL信号
  27. 这两个信号的差别就是 SIGTERM信号 可以自行清理收尾工作 也可以忽略该信号 如果收到SIGKILL信号 就会强行立即终止,那些正在进行中的操作就会全部丢失
  28. 重启一个容器
  29. docker restart <容器 ID>
  30. 进入一个容器
  31. 在使用-d参数时, 容器启动后进入后台 此时想要进入容器 可以通过一下指令进入
  32. docker attach
  33. docker exec 推荐大家使用docker exec 命令 因为此退出容器终端不会导致容器的停止
  34. docker 容器使用 systemctl 命令是报错
  35. 看了许多解决方案,但是对于新手来说并不友好,不是特别清楚
  36. 报错内容:
  37. System has not been booted with systemd as init system (PID 1). Can't operate.
  38. Failed to connect to bus: Host is down
  39. 解决方法:
  40. docker run -itd --privileged --name myCentos centos /usr/sbin/init
  41. 创建完成后: 请使用以下命令进入容器
  42. docker exec -it myCentos /bin/bash
  43. 加粗的内容要特别注意,不能遗忘
  44. 原因就是: 默认情况下,在第一步执行的是 /bin/bash,而因为docker中的bug,无法使用systemctl
  45. 所以我们使用了 /usr/sbin/init 同时 --privileged 这样就能够使用systemctl了,但覆盖了默认的 /bin/bash
  46. 因此我们如果想进入容器 就不能再使用 docker attach myCentos
  47. 而只能使用 docker exec -it myCentos /bin/bash 因为 exec 可以让我们执行被覆盖掉的默认命令 /bin/bash
  48. 同时 -it 也是必须的。
  49. -i: 允许你对容器内的标准输入(stdin) 进行交互
  50. -t: 在新 容器内指定一个伪终端或终端
  51. 对于ubuntu 也类似,可能init 目录不太相同
  52. 当然具体什么bug 我是不知道的,期望以后会会修复