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

镜像(images):
docker镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run===》tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)。
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。启动,停止,删除,基本命令!
目前就可以直接把这个容器理解为就是一个简易的Linux系统
仓库(repository):
仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库
Docker Hub(默认是国外的)
阿里云…都有容器服务器(配置镜像加速!)
2.安装docker
1.卸载久的版本
sudo apt-get remove docker docker-engine docker.io containerd runc

2.选择安装方式
您可以根据需要以不同的方式安装Docker Engine:
- 大多数用户会 设置Docker的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法。
- 一些用户下载并手动安装DEB软件包, 并完全手动管理升级。这在诸如在无法访问互联网的空白系统上安装Docker的情况下很有用。
- 在测试和开发环境中,一些用户选择使用自动 便利脚本来安装Docker
3.使用存储库安装
1.更新apt软件包索引并安装软件包以允许apt通过HTTPS使用存储库:
$ sudo apt-get update$ sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release
2.添加Docker的官方GPG密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg#注意默认是从国外的!#没有梯子的话,推荐使用阿里云国内的镜像#http://mirrors.aliyun.com/docker-ce/linux/ubuntu/docker-ce.repo(自己可以去百度搜索一下,地址不确定对)
3.安装DOCKER引擎:
#更新apt程序包索引$ sudo apt-get update#安装docker相关的额 docker-ce社区 ee企业版$ sudo apt-get install docker-ce docker-ce-cli containerd.io
4.启动docker:
$ systemctl start docker
5.通过运行hello-world 映像来验证是否正确安装了Docker Engine 。
$ sudo docker run hello-world

安装成功!
6.查看docker的镜像,里面有新加的镜像(hello-world)
$ socker images

3.底层原理
特别说明(回顾 run hello-world流程)

底层原理
Docker是怎么工作的?
Docker是一个Client-Server结构框架,Docker的守护进程运行在主机上,通过Socker从客户端访问!
DockerServer接受到Docker-Client的指令,就会执行这个指令!
Docker为什么比VM快?
1.Docker有着比虚拟机更少的抽象层
2.Docker利用的是宿主的内核,vm需要是Guest OS.
所以说,新建一个容器的时候,docker不需要向虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!
4.卸载Docker
1.卸载Docker Engine,CLI和Containerd软件包:(卸载依赖)
$ sudo apt-get purge docker-ce docker-ce-cli containerd.io
2.主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:(删除资源)
$ sudo rm -rf /var/lib/docker$ sudo rm -rf /var/lib/containerd# /var/lib/docker docker的默认路径
您必须手动删除所有已编辑的配置文件。
5docker的常用命令
1.帮助命令
docker version #显示docker的版本信息docker info #显示docker的系统信息,包括镜像和容器的数量docker 命令 --help #帮助命令
帮助文档地址:https://docs.docker.com/engine/
2.镜像命令
docker images #查看所有本地仓库的镜像docker images -a,-all #列出所有镜像docker images -q,--quiet #只显示镜像id
1.docker search搜索镜像
docker search#可选择,通过搜索来过滤--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
2.docker pull下载镜像
docker pull 镜像名字[:tag]root@iZbp1dxawsti21zie6fvypZ:~# docker pull mysqlUsing default tag: latest #如果不写tag,默认就是latestlatest: Pulling from library/mysql75646c2fb410: Already exists #分层下载,docker image的核心 联合文件系统878f3d947b10: Pull complete1a2dd2f75b04: Pull complete8faaceef2b94: Pull completeb77c8c445ec2: Pull complete074029aeaa5f: Pull complete5a1122545c6c: Pull complete6c95ccd00139: Pull complete60a719448fdb: Pull completef31898a387a3: Pull completebcf402a978dc: Pull completecf0bc7da512e: Pull completeDigest: sha256:c35eb76bbccfd0138c8c68ccb9b4cffe42c488a27f64ddc31a2b5f65aa93fce6 #签名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest #真实地址docker pull mysql#等价于docker pull docker.io/library/mysql:latest#指定版本下载docker pull mysql:5.7#后面的版本号一定要在hub.docker.com文档上有

3.docker rmi删除镜像
docker rmi -f 容器id #删除指定的镜像docker rmi -f 容器id 容器id 容器id #删除多个镜像docker rmi -f $(docker images -aq) #删除全部的镜像
3.容器命令
1.说明:我们有了镜像才可以创建容器,现在我们先下载一个centos来测试学习
docker run [可选参数] images#参数说明--name="Name" 容器名字 tomcat01 tomcat02,用来区分容器-d 后台方式运行-it 使用交互方式运行,进入容器查看内容-p 指定容器的端口-p 8080:8080-p ip 主机端口:容器端口-p 主机端口:容器端口(常用)-p 容器端口-P 随机指示端口#测试,启动并进入容器docker run -it centos /bin/bash[root@aa252794b004/]# ls #查看容器内的centos,基础版本,很多命令都是不完善的!bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var#从容器中退回主机exit
2.列出所有的运行的容器
docker ps 命令#列出当前正在运行的容器-a #列出当前正在运行的容器+带出历史运行过的容器-n=? #列出最近创建的容器-q #只显示容器的编号
3.退出容器
exit #直接容器停止退出ctrl+P+Q #容器不停止退出
4.删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -fdocker rm -f $(docker ps -aq) #删除特定的容器docker ps -a -q|xargs docker rm #删除所有的容器
5.启动和停止容器操作
docker start 容器id #启动容器docker restart 容器id #重启容器docker stop 容器id #停止当前正在运行的容器docker kill 容器id #强制停止当前容器
4.常用的其他命令
1.后台启动容器
#命令 docker run -d 镜像名字docker run -d centos#问题docker ps,发现centos停止了#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
2.查看日志
docker logs -f -t --tail 容器#显示日志-tf #显示日志--tail number #要显示日志条数
3.查看容器进程
root@VM-12-15-ubuntu:~# docker top fcf69a98e0c

4.查看镜像元数据
#命令docker inspect 容器id#测试root@VM-12-15-ubuntu:~# docker inspect fcf69a98e0c[{"Id": "fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8","Created": "2021-04-02T03:11:11.204059089Z","Path": "docker-entrypoint.sh","Args": ["mysqld"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 13469,"ExitCode": 0,"Error": "","StartedAt": "2021-04-02T03:11:11.878505552Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:1138596852f3bde52db796c43d9f1e9637209af95ead4ec606b376136ddf87b0","ResolvConfPath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/resolv.conf","HostnamePath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/hostname","HostsPath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/hosts","LogPath": "/var/lib/docker/containers/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8/fcf69a98e0c1db6d9ffb3932f08005be4acca3a0914e47b01b467bb5ed43e4f8-json.log","Name": "/db","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "docker-default","ExecIDs": ["1c5eb20f1ec6d21970ff23ac04ec930ed4a6b9142c3bd82bbab139575f8121fd"],"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"CgroupnsMode": "host","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"KernelMemory": 0,"KernelMemoryTCP": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"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","MergedDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6/merged","UpperDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6/diff","WorkDir": "/var/lib/docker/overlay2/d683118f4c698910e5d63812080f125266121a47e6d7b74a25d54dabcc4a9ac6/work"},"Name": "overlay2"},"Mounts": [{"Type": "volume","Name": "9cce93ddb144701e5182c58eef5959f03577bea06cbf5a8ff748f8bf772c1d13","Source": "/var/lib/docker/volumes/9cce93ddb144701e5182c58eef5959f03577bea06cbf5a8ff748f8bf772c1d13/_data","Destination": "/var/lib/mysql","Driver": "local","Mode": "","RW": true,"Propagation": ""}],"Config": {"Hostname": "fcf69a98e0c1","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"3306/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["MYSQL_ROOT_PASSWORD=123456","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOSU_VERSION=1.12","GPG_KEYS=177F4010FE56CA3336300305F1656F24C74CD1D8","MARIADB_MAJOR=10.5","MARIADB_VERSION=1:10.5.9+maria~focal"],"Cmd": ["mysqld"],"Image": "mariadb","Volumes": {"/var/lib/mysql": {}},"WorkingDir": "","Entrypoint": ["docker-entrypoint.sh"],"OnBuild": null,"Labels": {}},"NetworkSettings": {"Bridge": "","SandboxID": "983e97f6721ec0535c0def16eb9378981af0a83fbb46b6fceea95296d8964638","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {"3306/tcp": null},"SandboxKey": "/var/run/docker/netns/983e97f6721e","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "109af1082479d12aefb7d75bd7f0c137256cb72c2feff9b08006ae786b837e6d","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "59b4bc6965ae5171e44003ce21a459cdea8ba97c444dddc3e2f8699303bbc464","EndpointID": "109af1082479d12aefb7d75bd7f0c137256cb72c2feff9b08006ae786b837e6d","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null}}}}]
5.进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置#命令docker exec -it 容器id bashShell#测试root@VM-12-15-ubuntu:~# docker exec -it bf5f6f7a94c7 /bin/bash[root@bf5f6f7a94c7 /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 14:52 pts/0 00:00:00 /bin/bashroot 16 0 0 14:53 pts/1 00:00:00 /bin/bashroot 30 16 0 14:54 pts/1 00:00:00 ps -ef#方法二docker attach 容器id#测试root@VM-12-15-ubuntu:~# docker attach bf5f6f7a94c7[root@bf5f6f7a94c7 /]##docker exec #进入容器开启一个新的终端,可以在里面操作(常用)#docker attach #进入容器正在执行的终端,不会启动新的进程
6.从容器内拷贝文件到主机上
#进入容器内部root@VM-12-15-ubuntu:~# docker attach bf5f6f7a94c7#进入容器的home目录[root@bf5f6f7a94c7 /]# cd /home#查看home目录下的文件夹(此时还没有)[root@bf5f6f7a94c7 home]# ls#在容器内部新建一个文件夹[root@bf5f6f7a94c7 home]# touch test.java#此时home下已经有一个test.java文件夹了[root@bf5f6f7a94c7 home]# lstest.java#退出centos里面[root@bf5f6f7a94c7 home]# exitexitroot@VM-12-15-ubuntu:~# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS56eac8a3c6b3 wordpress "docker-entrypoint.s…" 12 hours ago Up 12 hoursfcf69a98e0c1 mariadb "docker-entrypoint.s…" 12 hours ago Up 12 hours 3306/tcproot@VM-12-15-ubuntu:~# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUSbf5f6f7a94c7 centos "/bin/bash" 23 minutes ago Exited (0) 25bc40dc48b3e5 centos "/bin/bash" 24 minutes ago Exited (0) 24bfd11b12e144 centos "/bin/bash" 25 minutes ago Exited (0) 25af3110239277 centos "/bin/bash" 26 minutes ago Exited (0) 26ce0999227026 centos "/bin/bash" 2 hours ago Exited (0) 2 hours91e408ad37cc centos "/bin/bash" 3 hours ago Exited (0) 2 hoursb6f9da0e0673 centos "/bin/bash" 3 hours ago Exited (130) 3aa252794b004 centos "/bin/bash" 3 hours ago Exited (0) 3 hours8e13d6789057 mysql "docker-entrypoint.s…" 12 hours ago Created56eac8a3c6b3 wordpress "docker-entrypoint.s…" 12 hours ago Up 12 hoursfcf69a98e0c1 mariadb "docker-entrypoint.s…" 12 hours ago Up 12 hoursfc446e0a9e46 hello-world "/hello" 24 hours ago Exited (0) 244e7025ea39d3 hello-world "/hello" 24 hours ago Exited (0) 24#将这文件拷出来到主机上root@VM-12-15-ubuntu:~# docker cp bf5f6f7a94c7:/home/test.java /homeroot@VM-12-15-ubuntu:~# cd /home#现在我的root用户下home目录下已经有text.java这个文件了root@VM-12-15-ubuntu:/home# lslighthouse test.java ubuntu#拷贝是一个手动过程,未来我们使用-v卷的技术,可以实现

6.练习
1.docker安装nginx
#1.搜索镜像 search 建议大家去docker搜索,可以看到帮助文档#2.下载镜像 pull#3.运行镜像root@VM-12-15-ubuntu:~# docker pull nginxUsing default tag: latestlatest: Pulling from library/nginx75646c2fb410: Already exists6128033c842f: Pull complete71a81b5270eb: Pull completeb5fc821c48a1: Pull completeda3f514a6428: Pull complete3be359fed358: Pull completeDigest: sha256:bae781e7f518e0fb02245140c97e6ddc9f5fcf6aecc043dd9d17e33aec81c832Status: Downloaded newer image for nginx:latestdocker.io/library/nginx:latestroot@VM-12-15-ubuntu:~# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEwordpress latest bfcb59709143 2 days ago 550MBnginx latest 7ce4f91ef623 3 days ago 133MBmysql latest e646c6533b0b 3 days ago 546MBmariadb latest 1138596852f3 8 days ago 401MBhello-world latest d1165f221234 4 weeks ago 13.3kBcentos latest 300e315adb2f 3 months ago 209MB#运行刚下载的这个nginx镜像,并且命名为nginx01 将本地的3344端口映射容器内的80端口# -d 后台运行# --name 给容器命名# -p 宿主机端口号,容器内部端口root@VM-12-15-ubuntu:~# docker run -d --name nginx01 -p 3344:80 nginxdc03b0f3628f967513b12c3c797de41343ef1fff343b6dea50b75a3522634a62#打开页面root@VM-12-15-ubuntu:~# curl localhost:3344<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>root@VM-12-15-ubuntu:~# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTSdc03b0f3628f nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes56eac8a3c6b3 wordpress "docker-entrypoint.s…" 33 hours ago Up 33 hoursfcf69a98e0c1 mariadb "docker-entrypoint.s…" 33 hours ago Up 33 hours
此时如果你服务器3344端口开发的话,此时你就可以在你的浏览器上看到这个页面了
进入容器
#进入容器root@VM-12-15-ubuntu:~# docker exec -it nginx01 /bin/bashroot@dc03b0f3628f:/# lsbin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var#查找nginx的位置root@dc03b0f3628f:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx#进入nginx位置root@dc03b0f3628f:/# cd /etc/nginx#查看里面的内容root@dc03b0f3628f:/etc/nginx# lsconf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
端口映射原理
2.docker安装tomcat
#拉取docker pull tomcat#运行docker run -d -p 3355:8080 --name tomcat01 tomcat
此时打开页面会发现,tomcat启动了,但是页面没有出现
#进入容器root@VM-12-15-ubuntu:~# docker exec -it tomcat01 /bin/bash#发现容器中没有webapps文件夹root@172b6fc0847e:/usr/local/tomcat# lsBUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.distCONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps workroot@172b6fc0847e:/usr/local/tomcat# cd webapps.dist#进入webapps.dist发现这里面有我们之前在webapps中看到的页面root@172b6fc0847e:/usr/local/tomcat/webapps.dist# lsROOT docs examples host-manager managerroot@172b6fc0847e:/usr/local/tomcat/webapps.dist# cd ..#我们把webapps.dist中的文件全部拷贝到webapps中root@172b6fc0847e:/usr/local/tomcat# cp -r webapps.dist/* webapps#此时我们tomcat中也有webapps页面了root@172b6fc0847e:/usr/local/tomcat# lsBUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.distCONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work##发现问题,1.Linux命令少了,2.没有webapps 保证最小可运行环境!!
再次打开浏览器,运行成功了
3.docker安装mysql
#首先我们先从官网上拉取mysql的镜像docker pull mysql:latest#查看我们安装的镜像是否有我们刚刚拉取的mysql镜像docker images#安装完成后,我们可以使用以下命令来运行 mysql 容器docker run -itd --name mysql-01(这个地方是你为容器命名的名字) -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456(这个地方是你为mysql设置的登录密码) mysql#通过 docker ps 命令查看是否安装成功docker ps


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

设置远程主机登录
mysql> use mysqlmysql> update user set user.Host='%' where user.User='root'mysql> flush privileges
最后利⽤Navicat等数据库可视化⼯具进⾏测试

4. docker安装YApi
1. 拉取mongo镜像docker pull mongo2. 启动mongodbdocker run -d --name mongo-yapi mongo3. 在阿里云仓库拉取yapi接口docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi4. 初始化 Yapi 数据库索引及管理员账号docker run -it --rm \--link mongo-yapi:mongo \--entrypoint npm \--workdir /api/vendors \registry.cn-hangzhou.aliyuncs.com/anoy/yapi \run install-server5. 启动yapi服务docker run -d \--name yapi \--link mongo-yapi:mongo \--workdir /api/vendors \-p 3000:3000 \registry.cn-hangzhou.aliyuncs.com/anoy/yapi \server/app.js
过程截图:



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

快速搭建一个博客
1.安装操作
#1.拉取docker镜像docker pull wordpress#2.拉取mariadb镜像(MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护)docker pull mariadb#启动mariadb数据库,设置名为db,用户名是root,密码是123456docker run --name=db --env MYSQL_ROOT_PASSWORD=123456 -d mariadb#启动mariadb服务,设置容并把80端口映射到宿主机的8080端口docker run --name=myblog --link db:mysql -p 8080:80 -d wordpress
2.查看容器状态
docker ps

3.查看你的防火墙,确定关闭,打开你的8080端口,然后在浏览器中输入你的主机ip:8080,会有这样一个页面
4.安装过程中需要到db容器里面手动创建数据库:
#进入数据库容器docker exec -it db /bin/bash#登录mysqlmysql -uroot -p123456#创建数据库create database wordpress;#退出exit#数据库用户名 root 密码 123456
5.登录
6.成功
