本文是大二时期所写,在我的博客上发布,现在在语雀上再次整理一下,我的博客地址:docker基础知识

docker

1.docker基本组成

image.png

镜像(images):

docker镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run===》tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)。

容器(container):

Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。启动,停止,删除,基本命令!

目前就可以直接把这个容器理解为就是一个简易的Linux系统

仓库(repository):

仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库

Docker Hub(默认是国外的)

阿里云…都有容器服务器(配置镜像加速!)

2.安装docker

1.卸载久的版本
  1. sudo apt-get remove docker docker-engine docker.io containerd runc

image.png

2.选择安装方式

您可以根据需要以不同的方式安装Docker Engine:

  • 大多数用户会 设置Docker的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法。
  • 一些用户下载并手动安装DEB软件包, 并完全手动管理升级。这在诸如在无法访问互联网的空白系统上安装Docker的情况下很有用。
  • 在测试和开发环境中,一些用户选择使用自动 便利脚本来安装Docker

3.使用存储库安装

1.更新apt软件包索引并安装软件包以允许apt通过HTTPS使用存储库:

  1. $ sudo apt-get update
  2. $ sudo apt-get install \
  3. apt-transport-https \
  4. ca-certificates \
  5. curl \
  6. gnupg \
  7. lsb-release

2.添加Docker的官方GPG密钥:

  1. $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  2. #注意默认是从国外的!
  3. #没有梯子的话,推荐使用阿里云国内的镜像
  4. #http://mirrors.aliyun.com/docker-ce/linux/ubuntu/docker-ce.repo(自己可以去百度搜索一下,地址不确定对)

3.安装DOCKER引擎:

  1. #更新apt程序包索引
  2. $ sudo apt-get update
  3. #安装docker相关的额 docker-ce社区 ee企业版
  4. $ sudo apt-get install docker-ce docker-ce-cli containerd.io

4.启动docker:

  1. $ systemctl start docker

5.通过运行hello-world 映像来验证是否正确安装了Docker Engine 。

  1. $ sudo docker run hello-world

image.png

安装成功!

6.查看docker的镜像,里面有新加的镜像(hello-world)

  1. $ socker images

image.png

3.底层原理

特别说明(回顾 run hello-world流程)

image.png

底层原理

Docker是怎么工作的?

Docker是一个Client-Server结构框架,Docker的守护进程运行在主机上,通过Socker从客户端访问!

DockerServer接受到Docker-Client的指令,就会执行这个指令!
image.png

Docker为什么比VM快?

1.Docker有着比虚拟机更少的抽象层

2.Docker利用的是宿主的内核,vm需要是Guest OS.
image.png

所以说,新建一个容器的时候,docker不需要向虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!

4.卸载Docker

1.卸载Docker Engine,CLI和Containerd软件包:(卸载依赖)
  1. $ sudo apt-get purge docker-ce docker-ce-cli containerd.io

2.主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:(删除资源)
  1. $ sudo rm -rf /var/lib/docker
  2. $ sudo rm -rf /var/lib/containerd
  3. # /var/lib/docker docker的默认路径

您必须手动删除所有已编辑的配置文件。

5docker的常用命令

1.帮助命令
  1. docker version #显示docker的版本信息
  2. docker info #显示docker的系统信息,包括镜像和容器的数量
  3. docker 命令 --help #帮助命令

帮助文档地址:https://docs.docker.com/engine/

2.镜像命令
  1. docker images #查看所有本地仓库的镜像
  2. docker images -a,-all #列出所有镜像
  3. docker images -q,--quiet #只显示镜像id

1.docker search搜索镜像

  1. docker search
  2. #可选择,通过搜索来过滤
  3. --filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的

2.docker pull下载镜像

  1. docker pull 镜像名字[:tag]
  2. root@iZbp1dxawsti21zie6fvypZ:~# docker pull mysql
  3. Using default tag: latest #如果不写tag,默认就是latest
  4. latest: Pulling from library/mysql
  5. 75646c2fb410: Already exists #分层下载,docker image的核心 联合文件系统
  6. 878f3d947b10: Pull complete
  7. 1a2dd2f75b04: Pull complete
  8. 8faaceef2b94: Pull complete
  9. b77c8c445ec2: Pull complete
  10. 074029aeaa5f: Pull complete
  11. 5a1122545c6c: Pull complete
  12. 6c95ccd00139: Pull complete
  13. 60a719448fdb: Pull complete
  14. f31898a387a3: Pull complete
  15. bcf402a978dc: Pull complete
  16. cf0bc7da512e: Pull complete
  17. Digest: sha256:c35eb76bbccfd0138c8c68ccb9b4cffe42c488a27f64ddc31a2b5f65aa93fce6 #签名
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest #真实地址
  20. docker pull mysql
  21. #等价于
  22. docker pull docker.io/library/mysql:latest
  23. #指定版本下载
  24. docker pull mysql:5.7
  25. #后面的版本号一定要在hub.docker.com文档上有

image.png

3.docker rmi删除镜像

  1. docker rmi -f 容器id #删除指定的镜像
  2. docker rmi -f 容器id 容器id 容器id #删除多个镜像
  3. docker rmi -f $(docker images -aq) #删除全部的镜像

3.容器命令

1.说明:我们有了镜像才可以创建容器,现在我们先下载一个centos来测试学习

  1. docker run [可选参数] images
  2. #参数说明
  3. --name="Name" 容器名字 tomcat01 tomcat02,用来区分容器
  4. -d 后台方式运行
  5. -it 使用交互方式运行,进入容器查看内容
  6. -p 指定容器的端口-p 8080:8080
  7. -p ip 主机端口:容器端口
  8. -p 主机端口:容器端口(常用)
  9. -p 容器端口
  10. -P 随机指示端口
  11. #测试,启动并进入容器
  12. docker run -it centos /bin/bash
  13. [root@aa252794b004/]# ls #查看容器内的centos,基础版本,很多命令都是不完善的!
  14. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  15. #从容器中退回主机
  16. exit

2.列出所有的运行的容器

  1. docker ps 命令
  2. #列出当前正在运行的容器
  3. -a #列出当前正在运行的容器+带出历史运行过的容器
  4. -n=? #列出最近创建的容器
  5. -q #只显示容器的编号

3.退出容器

  1. exit #直接容器停止退出
  2. ctrl+P+Q #容器不停止退出

4.删除容器

  1. docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
  2. docker rm -f $(docker ps -aq) #删除特定的容器
  3. docker ps -a -q|xargs docker rm #删除所有的容器

5.启动和停止容器操作

  1. docker start 容器id #启动容器
  2. docker restart 容器id #重启容器
  3. docker stop 容器id #停止当前正在运行的容器
  4. docker kill 容器id #强制停止当前容器

4.常用的其他命令

1.后台启动容器

  1. #命令 docker run -d 镜像名字
  2. docker run -d centos
  3. #问题docker ps,发现centos停止了
  4. #常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

2.查看日志

  1. docker logs -f -t --tail 容器
  2. #显示日志
  3. -tf #显示日志
  4. --tail number #要显示日志条数

3.查看容器进程

  1. root@VM-12-15-ubuntu:~# docker top fcf69a98e0c

image.png

4.查看镜像元数据

  1. #命令
  2. docker inspect 容器id
  3. #测试
  4. root@VM-12-15-ubuntu:~# docker inspect fcf69a98e0c
  5. [
  6. {
  7. "Id": "fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8",
  8. "Created": "2021-04-02T03:11:11.204059089Z",
  9. "Path": "docker-entrypoint.sh",
  10. "Args": [
  11. "mysqld"
  12. ],
  13. "State": {
  14. "Status": "running",
  15. "Running": true,
  16. "Paused": false,
  17. "Restarting": false,
  18. "OOMKilled": false,
  19. "Dead": false,
  20. "Pid": 13469,
  21. "ExitCode": 0,
  22. "Error": "",
  23. "StartedAt": "2021-04-02T03:11:11.878505552Z",
  24. "FinishedAt": "0001-01-01T00:00:00Z"
  25. },
  26. "Image": "sha256:1138596852f3bde52db796c43d9f1e9637209af95ead4ec606b376136ddf87b0",
  27. "ResolvConfPath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/resolv.conf",
  28. "HostnamePath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/hostname",
  29. "HostsPath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/hosts",
  30. "LogPath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8-json.log",
  31. "Name": "/db",
  32. "RestartCount": 0,
  33. "Driver": "overlay2",
  34. "Platform": "linux",
  35. "MountLabel": "",
  36. "ProcessLabel": "",
  37. "AppArmorProfile": "docker-default",
  38. "ExecIDs": [
  39. "1c5eb20f1ec6d21970ff23ac04ec930ed4a6b9142c3bd82bbab139575f8121fd"
  40. ],
  41. "HostConfig": {
  42. "Binds": null,
  43. "ContainerIDFile": "",
  44. "LogConfig": {
  45. "Type": "json-file",
  46. "Config": {}
  47. },
  48. "NetworkMode": "default",
  49. "PortBindings": {},
  50. "RestartPolicy": {
  51. "Name": "no",
  52. "MaximumRetryCount": 0
  53. },
  54. "AutoRemove": false,
  55. "VolumeDriver": "",
  56. "VolumesFrom": null,
  57. "CapAdd": null,
  58. "CapDrop": null,
  59. "CgroupnsMode": "host",
  60. "Dns": [],
  61. "DnsOptions": [],
  62. "DnsSearch": [],
  63. "ExtraHosts": null,
  64. "GroupAdd": null,
  65. "IpcMode": "private",
  66. "Cgroup": "",
  67. "Links": null,
  68. "OomScoreAdj": 0,
  69. "PidMode": "",
  70. "Privileged": false,
  71. "PublishAllPorts": false,
  72. "ReadonlyRootfs": false,
  73. "SecurityOpt": null,
  74. "UTSMode": "",
  75. "UsernsMode": "",
  76. "ShmSize": 67108864,
  77. "Runtime": "runc",
  78. "ConsoleSize": [
  79. 0,
  80. 0
  81. ],
  82. "Isolation": "",
  83. "CpuShares": 0,
  84. "Memory": 0,
  85. "NanoCpus": 0,
  86. "CgroupParent": "",
  87. "BlkioWeight": 0,
  88. "BlkioWeightDevice": [],
  89. "BlkioDeviceReadBps": null,
  90. "BlkioDeviceWriteBps": null,
  91. "BlkioDeviceReadIOps": null,
  92. "BlkioDeviceWriteIOps": null,
  93. "CpuPeriod": 0,
  94. "CpuQuota": 0,
  95. "CpuRealtimePeriod": 0,
  96. "CpuRealtimeRuntime": 0,
  97. "CpusetCpus": "",
  98. "CpusetMems": "",
  99. "Devices": [],
  100. "DeviceCgroupRules": null,
  101. "DeviceRequests": null,
  102. "KernelMemory": 0,
  103. "KernelMemoryTCP": 0,
  104. "MemoryReservation": 0,
  105. "MemorySwap": 0,
  106. "MemorySwappiness": null,
  107. "OomKillDisable": false,
  108. "PidsLimit": null,
  109. "Ulimits": null,
  110. "CpuCount": 0,
  111. "CpuPercent": 0,
  112. "IOMaximumIOps": 0,
  113. "IOMaximumBandwidth": 0,
  114. "MaskedPaths": [
  115. "/proc/asound",
  116. "/proc/acpi",
  117. "/proc/kcore",
  118. "/proc/keys",
  119. "/proc/latency_stats",
  120. "/proc/timer_list",
  121. "/proc/timer_stats",
  122. "/proc/sched_debug",
  123. "/proc/scsi",
  124. "/sys/firmware"
  125. ],
  126. "ReadonlyPaths": [
  127. "/proc/bus",
  128. "/proc/fs",
  129. "/proc/irq",
  130. "/proc/sys",
  131. "/proc/sysrq-trigger"
  132. ]
  133. },
  134. "GraphDriver": {
  135. "Data": {
  136. "LowerDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6-init/diff:/var/lib/docker/overlay2/65d3c873e8defe8a3d182adcada3577ef86fa875f3734ccd027ee0cc0b04be7e/diff:/var/lib/docker/overlay2/796c447eb6d5bf42fea436a2e7bd0bd7baf87bca7f01d0b55bf6c813fc8ac04f/diff:/var/lib/docker/overlay2/4ac0f49242735157e0bc1ffd6222fd40ead92d5ec6c04d40ad42b87714bf65c9/diff:/var/lib/docker/overlay2/e6bc739f0aa56cf25cf5aaaad42efb036c341e29bec6894d9d06aa08b2aa091e/diff:/var/lib/docker/overlay2/142e3cadd19b8dcf680fb336527f8afd1578b505c56d645923ef9a796f86f299/diff:/var/lib/docker/overlay2/1e860716c07bea2bf959cfd1e98b8b0042836dc4d2a2c3a33f8ae8a94af5d2f1/diff:/var/lib/docker/overlay2/72adc7bc6e02e68bc978d3574fa42257d949301aef661891f58ad70001074809/diff:/var/lib/docker/overlay2/7f0d7703453760490a7fe34fd903195aa8038999543612495520d0565d53446d/diff:/var/lib/docker/overlay2/f021a251447ac0de5e86e42b11de8275f51f4370f2a9b5779f854c6c53a17641/diff:/var/lib/docker/overlay2/420dbc81ad6ec2a63f4eb9f2d95329bf0bc4613906ce04409ca010b00a6a9565/diff:/var/lib/docker/overlay2/de1591fd0498e4da21c7224c12d09fab21ac4da868b4eb91479e6dd97fbe75ad/diff:/var/lib/docker/overlay2/1c05621811c53c5f835565a2bd03fe03fcad2e97930905fcfa828d4579bbc4bb/diff",
  137. "MergedDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6/merged",
  138. "UpperDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6/diff",
  139. "WorkDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6/work"
  140. },
  141. "Name": "overlay2"
  142. },
  143. "Mounts": [
  144. {
  145. "Type": "volume",
  146. "Name": "9cce93ddb144701e5182c58eef5959f03577bea06cbf5a8ff748f8bf772c1d13",
  147. "Source": "/var/lib/docker/volumes/9cce93ddb144701e5182c58eef5959f03577bea06cbf5a8ff748f8bf772c1d13/_data",
  148. "Destination": "/var/lib/mysql",
  149. "Driver": "local",
  150. "Mode": "",
  151. "RW": true,
  152. "Propagation": ""
  153. }
  154. ],
  155. "Config": {
  156. "Hostname": "fcf69a98e0c1",
  157. "Domainname": "",
  158. "User": "",
  159. "AttachStdin": false,
  160. "AttachStdout": false,
  161. "AttachStderr": false,
  162. "ExposedPorts": {
  163. "3306/tcp": {}
  164. },
  165. "Tty": false,
  166. "OpenStdin": false,
  167. "StdinOnce": false,
  168. "Env": [
  169. "MYSQL_ROOT_PASSWORD=123456",
  170. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  171. "GOSU_VERSION=1.12",
  172. "GPG_KEYS=177F4010FE56CA3336300305F1656F24C74CD1D8",
  173. "MARIADB_MAJOR=10.5",
  174. "MARIADB_VERSION=1:10.5.9+maria~focal"
  175. ],
  176. "Cmd": [
  177. "mysqld"
  178. ],
  179. "Image": "mariadb",
  180. "Volumes": {
  181. "/var/lib/mysql": {}
  182. },
  183. "WorkingDir": "",
  184. "Entrypoint": [
  185. "docker-entrypoint.sh"
  186. ],
  187. "OnBuild": null,
  188. "Labels": {}
  189. },
  190. "NetworkSettings": {
  191. "Bridge": "",
  192. "SandboxID": "983e97f6721ec0535c0def16eb9378981af0a83fbb46b6fceea95296d8964638",
  193. "HairpinMode": false,
  194. "LinkLocalIPv6Address": "",
  195. "LinkLocalIPv6PrefixLen": 0,
  196. "Ports": {
  197. "3306/tcp": null
  198. },
  199. "SandboxKey": "/var/run/docker/netns/983e97f6721e",
  200. "SecondaryIPAddresses": null,
  201. "SecondaryIPv6Addresses": null,
  202. "EndpointID": "109af1082479d12aefb7d75bd7f0c137256cb72c2feff9b08006ae786b837e6d",
  203. "Gateway": "172.17.0.1",
  204. "GlobalIPv6Address": "",
  205. "GlobalIPv6PrefixLen": 0,
  206. "IPAddress": "172.17.0.2",
  207. "IPPrefixLen": 16,
  208. "IPv6Gateway": "",
  209. "MacAddress": "02:42:ac:11:00:02",
  210. "Networks": {
  211. "bridge": {
  212. "IPAMConfig": null,
  213. "Links": null,
  214. "Aliases": null,
  215. "NetworkID": "59b4bc6965ae5171e44003ce21a459cdea8ba97c444dddc3e2f8699303bbc464",
  216. "EndpointID": "109af1082479d12aefb7d75bd7f0c137256cb72c2feff9b08006ae786b837e6d",
  217. "Gateway": "172.17.0.1",
  218. "IPAddress": "172.17.0.2",
  219. "IPPrefixLen": 16,
  220. "IPv6Gateway": "",
  221. "GlobalIPv6Address": "",
  222. "GlobalIPv6PrefixLen": 0,
  223. "MacAddress": "02:42:ac:11:00:02",
  224. "DriverOpts": null
  225. }
  226. }
  227. }
  228. }
  229. ]

5.进入当前正在运行的容器

  1. #我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
  2. #命令
  3. docker exec -it 容器id bashShell
  4. #测试
  5. root@VM-12-15-ubuntu:~# docker exec -it bf5f6f7a94c7 /bin/bash
  6. [root@bf5f6f7a94c7 /]# ps -ef
  7. UID PID PPID C STIME TTY TIME CMD
  8. root 1 0 0 14:52 pts/0 00:00:00 /bin/bash
  9. root 16 0 0 14:53 pts/1 00:00:00 /bin/bash
  10. root 30 16 0 14:54 pts/1 00:00:00 ps -ef
  11. #方法二
  12. docker attach 容器id
  13. #测试
  14. root@VM-12-15-ubuntu:~# docker attach bf5f6f7a94c7
  15. [root@bf5f6f7a94c7 /]#
  16. #docker exec #进入容器开启一个新的终端,可以在里面操作(常用)
  17. #docker attach #进入容器正在执行的终端,不会启动新的进程

6.从容器内拷贝文件到主机上

  1. #进入容器内部
  2. root@VM-12-15-ubuntu:~# docker attach bf5f6f7a94c7
  3. #进入容器的home目录
  4. [root@bf5f6f7a94c7 /]# cd /home
  5. #查看home目录下的文件夹(此时还没有)
  6. [root@bf5f6f7a94c7 home]# ls
  7. #在容器内部新建一个文件夹
  8. [root@bf5f6f7a94c7 home]# touch test.java
  9. #此时home下已经有一个test.java文件夹了
  10. [root@bf5f6f7a94c7 home]# ls
  11. test.java
  12. #退出centos里面
  13. [root@bf5f6f7a94c7 home]# exit
  14. exit
  15. root@VM-12-15-ubuntu:~# docker ps
  16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
  17. 56eac8a3c6b3 wordpress "docker-entrypoint.s…" 12 hours ago Up 12 hours
  18. fcf69a98e0c1 mariadb "docker-entrypoint.s…" 12 hours ago Up 12 hours 3306/tcp
  19. root@VM-12-15-ubuntu:~# docker ps -a
  20. CONTAINER ID IMAGE COMMAND CREATED STATUS
  21. bf5f6f7a94c7 centos "/bin/bash" 23 minutes ago Exited (0) 25
  22. bc40dc48b3e5 centos "/bin/bash" 24 minutes ago Exited (0) 24
  23. bfd11b12e144 centos "/bin/bash" 25 minutes ago Exited (0) 25
  24. af3110239277 centos "/bin/bash" 26 minutes ago Exited (0) 26
  25. ce0999227026 centos "/bin/bash" 2 hours ago Exited (0) 2 hours
  26. 91e408ad37cc centos "/bin/bash" 3 hours ago Exited (0) 2 hours
  27. b6f9da0e0673 centos "/bin/bash" 3 hours ago Exited (130) 3
  28. aa252794b004 centos "/bin/bash" 3 hours ago Exited (0) 3 hours
  29. 8e13d6789057 mysql "docker-entrypoint.s…" 12 hours ago Created
  30. 56eac8a3c6b3 wordpress "docker-entrypoint.s…" 12 hours ago Up 12 hours
  31. fcf69a98e0c1 mariadb "docker-entrypoint.s…" 12 hours ago Up 12 hours
  32. fc446e0a9e46 hello-world "/hello" 24 hours ago Exited (0) 24
  33. 4e7025ea39d3 hello-world "/hello" 24 hours ago Exited (0) 24
  34. #将这文件拷出来到主机上
  35. root@VM-12-15-ubuntu:~# docker cp bf5f6f7a94c7:/home/test.java /home
  36. root@VM-12-15-ubuntu:~# cd /home
  37. #现在我的root用户下home目录下已经有text.java这个文件了
  38. root@VM-12-15-ubuntu:/home# ls
  39. lighthouse test.java ubuntu
  40. #拷贝是一个手动过程,未来我们使用-v卷的技术,可以实现

image.png

6.练习

1.docker安装nginx
  1. #1.搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
  2. #2.下载镜像 pull
  3. #3.运行镜像
  4. root@VM-12-15-ubuntu:~# docker pull nginx
  5. Using default tag: latest
  6. latest: Pulling from library/nginx
  7. 75646c2fb410: Already exists
  8. 6128033c842f: Pull complete
  9. 71a81b5270eb: Pull complete
  10. b5fc821c48a1: Pull complete
  11. da3f514a6428: Pull complete
  12. 3be359fed358: Pull complete
  13. Digest: sha256:bae781e7f518e0fb02245140c97e6ddc9f5fcf6aecc043dd9d17e33aec81c832
  14. Status: Downloaded newer image for nginx:latest
  15. docker.io/library/nginx:latest
  16. root@VM-12-15-ubuntu:~# docker images
  17. REPOSITORY TAG IMAGE ID CREATED SIZE
  18. wordpress latest bfcb59709143 2 days ago 550MB
  19. nginx latest 7ce4f91ef623 3 days ago 133MB
  20. mysql latest e646c6533b0b 3 days ago 546MB
  21. mariadb latest 1138596852f3 8 days ago 401MB
  22. hello-world latest d1165f221234 4 weeks ago 13.3kB
  23. centos latest 300e315adb2f 3 months ago 209MB
  24. #运行刚下载的这个nginx镜像,并且命名为nginx01 将本地的3344端口映射容器内的80端口
  25. # -d 后台运行
  26. # --name 给容器命名
  27. # -p 宿主机端口号,容器内部端口
  28. root@VM-12-15-ubuntu:~# docker run -d --name nginx01 -p 3344:80 nginx
  29. dc03b0f3628f967513b12c3c797de41343ef1fff343b6dea50b75a3522634a62
  30. #打开页面
  31. root@VM-12-15-ubuntu:~# curl localhost:3344
  32. <!DOCTYPE html>
  33. <html>
  34. <head>
  35. <title>Welcome to nginx!</title>
  36. <style>
  37. body {
  38. width: 35em;
  39. margin: 0 auto;
  40. font-family: Tahoma, Verdana, Arial, sans-serif;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <h1>Welcome to nginx!</h1>
  46. <p>If you see this page, the nginx web server is successfully installed and
  47. working. Further configuration is required.</p>
  48. <p>For online documentation and support please refer to
  49. <a href="http://nginx.org/">nginx.org</a>.<br/>
  50. Commercial support is available at
  51. <a href="http://nginx.com/">nginx.com</a>.</p>
  52. <p><em>Thank you for using nginx.</em></p>
  53. </body>
  54. </html>
  55. root@VM-12-15-ubuntu:~# docker ps
  56. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
  57. dc03b0f3628f nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes
  58. 56eac8a3c6b3 wordpress "docker-entrypoint.s…" 33 hours ago Up 33 hours
  59. fcf69a98e0c1 mariadb "docker-entrypoint.s…" 33 hours ago Up 33 hours

此时如果你服务器3344端口开发的话,此时你就可以在你的浏览器上看到这个页面了
image.png

进入容器

  1. #进入容器
  2. root@VM-12-15-ubuntu:~# docker exec -it nginx01 /bin/bash
  3. root@dc03b0f3628f:/# ls
  4. bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  5. #查找nginx的位置
  6. root@dc03b0f3628f:/# whereis nginx
  7. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
  8. #进入nginx位置
  9. root@dc03b0f3628f:/# cd /etc/nginx
  10. #查看里面的内容
  11. root@dc03b0f3628f:/etc/nginx# ls
  12. conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf

端口映射原理
image.png

2.docker安装tomcat
  1. #拉取
  2. docker pull tomcat
  3. #运行
  4. docker run -d -p 3355:8080 --name tomcat01 tomcat

此时打开页面会发现,tomcat启动了,但是页面没有出现
image.png

  1. #进入容器
  2. root@VM-12-15-ubuntu:~# docker exec -it tomcat01 /bin/bash
  3. #发现容器中没有webapps文件夹
  4. root@172b6fc0847e:/usr/local/tomcat# ls
  5. BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
  6. CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
  7. root@172b6fc0847e:/usr/local/tomcat# cd webapps.dist
  8. #进入webapps.dist发现这里面有我们之前在webapps中看到的页面
  9. root@172b6fc0847e:/usr/local/tomcat/webapps.dist# ls
  10. ROOT docs examples host-manager manager
  11. root@172b6fc0847e:/usr/local/tomcat/webapps.dist# cd ..
  12. #我们把webapps.dist中的文件全部拷贝到webapps中
  13. root@172b6fc0847e:/usr/local/tomcat# cp -r webapps.dist/* webapps
  14. #此时我们tomcat中也有webapps页面了
  15. root@172b6fc0847e:/usr/local/tomcat# ls
  16. BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
  17. CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
  18. ##发现问题,1.Linux命令少了,2.没有webapps 保证最小可运行环境!!

再次打开浏览器,运行成功了
image.png

3.docker安装mysql
  1. #首先我们先从官网上拉取mysql的镜像
  2. docker pull mysql:latest
  3. #查看我们安装的镜像是否有我们刚刚拉取的mysql镜像
  4. docker images
  5. #安装完成后,我们可以使用以下命令来运行 mysql 容器
  6. docker run -itd --name mysql-01(这个地方是你为容器命名的名字) -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456(这个地方是你为mysql设置的登录密码) mysql
  7. #通过 docker ps 命令查看是否安装成功
  8. docker ps

image.png

image.png

  1. #进入容器内部
  2. docker exec -it mysql-01 /bin/bash
  3. #本机可以通过 root 和密码访问 MySQL 服务
  4. mysql -h localhost -u root -p

image.png

设置远程主机登录

  1. mysql> use mysql
  2. mysql> update user set user.Host='%' where user.User='root'
  3. mysql> flush privileges

最后利⽤Navicat等数据库可视化⼯具进⾏测试

image.png

4. docker安装YApi
  1. 1. 拉取mongo镜像
  2. docker pull mongo
  3. 2. 启动mongodb
  4. docker run -d --name mongo-yapi mongo
  5. 3. 在阿里云仓库拉取yapi接口
  6. docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
  7. 4. 初始化 Yapi 数据库索引及管理员账号
  8. docker run -it --rm \
  9. --link mongo-yapi:mongo \
  10. --entrypoint npm \
  11. --workdir /api/vendors \
  12. registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
  13. run install-server
  14. 5. 启动yapi服务
  15. docker run -d \
  16. --name yapi \
  17. --link mongo-yapi:mongo \
  18. --workdir /api/vendors \
  19. -p 3000:3000 \
  20. registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
  21. server/app.js

过程截图:

image.png

image.png

image.png

添加安全组规则和关闭防火墙,用浏览器打开页面,你的服务器地址:3000

image.png

快速搭建一个博客

1.安装操作

  1. #1.拉取docker镜像
  2. docker pull wordpress
  3. #2.拉取mariadb镜像(MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护)
  4. docker pull mariadb
  5. #启动mariadb数据库,设置名为db,用户名是root,密码是123456
  6. docker run --name=db --env MYSQL_ROOT_PASSWORD=123456 -d mariadb
  7. #启动mariadb服务,设置容并把80端口映射到宿主机的8080端口
  8. docker run --name=myblog --link db:mysql -p 8080:80 -d wordpress

2.查看容器状态

  1. docker ps

image.png

3.查看你的防火墙,确定关闭,打开你的8080端口,然后在浏览器中输入你的主机ip:8080,会有这样一个页面
image.png

4.安装过程中需要到db容器里面手动创建数据库:

  1. #进入数据库容器
  2. docker exec -it db /bin/bash
  3. #登录mysql
  4. mysql -uroot -p123456
  5. #创建数据库
  6. create database wordpress;
  7. #退出
  8. exit
  9. #数据库用户名 root 密码 123456

5.登录
image.png

6.成功
image.png