docker部署nginx
#1,搜索镜像 search 建议去dockerhub有帮助文档
#2,下载拉取镜像 pull
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 18496 [OK]
unit Official build of NGINX Unit: Universal Web … 1 [OK]
bitnami/nginx Bitnami nginx Docker Image 162 [OK]
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 25 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 89
kasmweb/nginx An Nginx image based off nginx:alpine and in… 6
rancher/nginx-ingress-controller 11
rancher/nginx-ingress-controller-defaultbackend 2
bitnami/nginx-exporter 3
rancher/nginx 2
rapidfort/nginx-ib RapidFort optimized, hardened image for NGIN… 0
rapidfort/nginx RapidFort optimized, hardened image for NGINX 3
vmware/nginx-photon 1
bitnami/nginx-ldap-auth-daemon 3
rapidfort/nginx-official RapidFort optimized, hardened image for NGIN… 1
vmware/nginx 2
rancher/nginx-conf 0
linuxserver/nginx An Nginx container, brought to you by LinuxS… 196
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 72 [OK]
bitnami/nginx-intel 1
rancher/nginx-ssl 0
circleci/nginx This image is for internal use 2
bitnamicharts/nginx 0
redash/nginx Pre-configured nginx to proxy linked contain… 2
continuumio/nginx-ingress-ws 0
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker pull nginx #拉取镜像
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker images #查看镜像是否拉取成功
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 7 days ago 13.3kB
nginx latest 605c77e624dd 16 months ago 141MB
#参数含义
# -d :后台运行
#--name :给容器命名,也可不写
# -p : 宿主机端口:容器端口 宿主机端口要打开(包括阿里云安全组)
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker run -d --name nginx01 -p 3344:80 nginx
133b9846111dddbd1c4ff05b81d059056cc32b27353fc6721eba99c500780b55
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
133b9846111d nginx "/docker-entrypoint.…" 19 seconds ago Up 18 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
[root@iZ0jl52dacrua17zrm6ii7Z home]# curl localhost:3344 #本机检验
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
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 and
working. 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>
启动后外网访问3344可以成功访问
docker部署Tomcat
#官方的例子使用
docker run -it --rm tomcat:9.0
#使用这个有什么坑呢,我们之前使用的容器在停止之后,容器还是可以查到的,而使用--rm在停止后就会删除容器
#所以一般可用于测试
#我们这里采用常规拉取
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker pull tomcat:9.0
9.0: Pulling from library/tomcat
0e29546d541c: Pull complete
9b829c73b52b: Pull complete
cb5b7ae36172: Pull complete
6494e4811622: Pull complete
668f6fcc5fa5: Pull complete
dc120c3e0290: Pull complete
8f7c0eebb7b1: Pull complete
77b694f83996: Pull complete
7662046c36cb: Pull complete
b93639122cb4: Pull complete
Digest: sha256:cd96d4f7d3f5fc4d3bc1622ec678207087b8215d55021a607ecaefba80b403ea
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 7 days ago 13.3kB
nginx latest 605c77e624dd 16 months ago 141MB
tomcat 9.0 b8e65a4d736d 16 months ago 680MB
#启动tomcat
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker run -d --name tomcat01 -p3366:8080 tomcat
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat #这里提示不是last版本自动下载了最后版本并启动成功
0e29546d541c: Already exists
9b829c73b52b: Already exists
cb5b7ae36172: Already exists
6494e4811622: Already exists
668f6fcc5fa5: Already exists
dc120c3e0290: Already exists
8f7c0eebb7b1: Already exists
77b694f83996: Already exists
0f611256ec3a: Pull complete
4f25def12f23: Pull complete
Digest: sha256:9dee185c3b161cdfede1f5e35e8b56ebc9de88ed3a79526939701f3537a52324
Status: Downloaded newer image for tomcat:latest
b1db91e7838529a87f9adf59425b833983c3307a84be26f9fe0979bce00d76fb
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1db91e78385 tomcat "catalina.sh run" 14 seconds ago Up 13 seconds 0.0.0.0:3366->8080/tcp, :::3366->8080/tcp tomcat01
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 7 days ago 13.3kB
nginx latest 605c77e624dd 16 months ago 141MB
tomcat 9.0 b8e65a4d736d 16 months ago 680MB
tomcat latest fb5657adc892 16 months ago 680MB
启动成功后会发现一个小问题,外网访问3366发现404深入探索发现在旗下webapps是空的访问不出什么,而且linux命令也少了,其默认最小镜像剔除了所有不必要的保证最小可运行,再次发现在webapps.dist下有将其拷贝到webapps下发现外网再次访问出现Tomcat首页
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker exec -it tomcat01 /bin/bash
root@b1db91e78385:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@b1db91e78385:/usr/local/tomcat# cd webapps.dist/
root@b1db91e78385:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@b1db91e78385:/usr/local/tomcat/webapps.dist# cd ..
root@b1db91e78385:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@b1db91e78385:/usr/local/tomcat# cd webapps
root@b1db91e78385:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
提交一个自己的镜像commit
docker commit 提交容器成为一个新镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[版本信息]
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1db91e78385 tomcat "catalina.sh run" 57 minutes ago Exited (143) 43 minutes ago tomcat01
133b9846111d nginx "/docker-entrypoint.…" About an hour ago Exited (0) About an hour ago nginx01
e3984e6ba99f hello-world "/hello" 19 hours ago Exited (0) 19 hours ago confident_elbakyan
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker start tomcat01
tomcat01
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1db91e78385 tomcat "catalina.sh run" 58 minutes ago Up 7 seconds 0.0.0.0:3366->8080/tcp, :::3366->8080/tcp tomcat01
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker stop tomcat01
tomcat01
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker commit -m="add webapps app" -a="hua" b1db91e78385 mytomcat:1.0
sha256:da03024c5ee6df98819fa6d524b10644611a983b04835c52301b48984e447589
[root@iZ0jl52dacrua17zrm6ii7Z home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 da03024c5ee6 15 seconds ago 684MB
hello-world latest 9c7a54a9a43c 7 days ago 13.3kB
nginx latest 605c77e624dd 16 months ago 141MB
tomcat 9.0 b8e65a4d736d 16 months ago 680MB
tomcat latest fb5657adc892 16 months ago 680MB
使用数据卷 容器数据的持久化和同步操作
使用数据卷
直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
docker部署Mysql
注意数据持久化和数据同步问题
#获取镜像
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker pull mysql:8.0
#运行容器,注意数据挂载 同时注意启动mysql需要设置密码
#官方的实例测试为:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#这里我们使用
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-test mysql:8.0
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-test mysql:8.0
c026cb5de3485c35929d49bf36322e6f68f76280269a4a8b122fd84903ccd93c
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c026cb5de348 mysql:8.0 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp mysql-test
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mar48WLI-1692501728698)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230512145723929.png)]
发现远程来捏数据库成功
[root@iZ0jl52dacrua17zrm6ii7Z /]# cd /home #这里发现挂载成功/home下多了mysql
[root@iZ0jl52dacrua17zrm6ii7Z home]# ls
hua huaStuday mysql panelExec.log redis www
[root@iZ0jl52dacrua17zrm6ii7Z home]# cd mysql
[root@iZ0jl52dacrua17zrm6ii7Z mysql]# ls
conf data
当我们可视化在连接成功的数据库新建一个数据库test,可以发现在本地虚拟机上的data下多了一个test同时docker上也会同步数据
[root@iZ0jl52dacrua17zrm6ii7Z mysql]# cd data
[root@iZ0jl52dacrua17zrm6ii7Z data]# ls
auto.cnf ca.pem ib_buffer_pool #innodb_temp public_key.pem undo_002
binlog.000001 client-cert.pem ibdata1 mysql server-cert.pem
binlog.000002 client-key.pem ib_logfile0 mysql.ibd server-key.pem
binlog.index #ib_16384_0.dblwr ib_logfile1 performance_schema sys
ca-key.pem #ib_16384_1.dblwr ibtmp1 private_key.pem undo_001
[root@iZ0jl52dacrua17zrm6ii7Z data]# ls
auto.cnf ca.pem ib_buffer_pool #innodb_temp public_key.pem undo_001
binlog.000001 client-cert.pem ibdata1 mysql server-cert.pem undo_002
binlog.000002 client-key.pem ib_logfile0 mysql.ibd server-key.pem
binlog.index #ib_16384_0.dblwr ib_logfile1 performance_schema sys
ca-key.pem #ib_16384_1.dblwr ibtmp1 private_key.pem test
这里就会又有小伙伴问了,那么我们删除容器虚拟机上的文件夹会消失吗?那么我们来试试
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c026cb5de348 mysql:8.0 "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp mysql-test
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker stop mysql-test #要想删除先暂停
mysql-test
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker rm mysql-test
mysql-test
[root@iZ0jl52dacrua17zrm6ii7Z /]# docker ps -a #发现已将容器删除
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#接下来查看本地虚拟机的数据是否随着容器的删除而消失删除
[root@iZ0jl52dacrua17zrm6ii7Z data]# cd /home
[root@iZ0jl52dacrua17zrm6ii7Z home]# ls
hua huaStuday mysql panelExec.log redis www
[root@iZ0jl52dacrua17zrm6ii7Z home]# cd mysql
[root@iZ0jl52dacrua17zrm6ii7Z mysql]# ls
conf data
[root@iZ0jl52dacrua17zrm6ii7Z mysql]# cd data
[root@iZ0jl52dacrua17zrm6ii7Z data]# ls
auto.cnf ca.pem ib_buffer_pool mysql server-cert.pem undo_002
binlog.000001 client-cert.pem ibdata1 mysql.ibd server-key.pem
binlog.000002 client-key.pem ib_logfile0 performance_schema sys
binlog.index #ib_16384_0.dblwr ib_logfile1 private_key.pem test
ca-key.pem #ib_16384_1.dblwr #innodb_temp public_key.pem undo_001
#这里发现本地虚拟机上的数据依旧完好如初,不会随着他的删除而消失,这就实现了数据持久化
docker run -it --name d2 --volumes-from d1 镜像id
--volumes-from #可以通过它实现容器间的数据共享
doker部署springboot项目
首先打包springboot项目并编写Dockerfile脚本
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
[root@iZ0jl52dacrua17zrm6ii7Z home]# mkdir idea
[root@iZ0jl52dacrua17zrm6ii7Z home]# ls
hua huaStuday idea panelExec.log redis www
[root@iZ0jl52dacrua17zrm6ii7Z home]# cd idea
[root@iZ0jl52dacrua17zrm6ii7Z idea]# ls
Dockerfile hello-0.0.1-SNAPSHOT.jar
# 构建镜像
[root@iZ0jl52dacrua17zrm6ii7Z idea]# docker build -t hello .
[+] Building 44.7s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 156B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/java:8 15.8s
=> [internal] load build context 0.2s
=> => transferring context: 19.15MB 0.2s
=> [1/2] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66 27.8s
=> => resolve docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b 0.0s
=> => sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d 2.00kB / 2.00kB 0.0s
=> => sha256:5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a264d0221f2d 51.36MB / 51.36MB 13.7s
=> => sha256:76610ec20bf5892e24cebd4153c7668284aa1d1151b7c3b0c7d50c579aa5ce75 42.50MB / 42.50MB 6.0s
=> => sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8 4.73kB / 4.73kB 0.0s
=> => sha256:fce5728aad85a763fe3c419db16885eb6f7a670a42824ea618414b8fb309ccde 18.54MB / 18.54MB 5.5s
=> => sha256:60170fec2151d2108ed1420625c51138434ba4e0223d3023353d3f32ffe3cfc2 593.15kB / 593.15kB 6.0s
=> => sha256:11f7af24ed9cf47597dd6cf9963bb3e9109c963f0135e869a9e9b4999fdc12a3 242B / 242B 6.4s
=> => sha256:e98f73de8f0d2ef292f58b004d67bc6e9ee779dcfaff7ebb3964649d4787b872 214B / 214B 6.3s
=> => sha256:49e2d6393f32abb1de7c9395c04c822ceb2287383d5a90998f7bd8dbfd43d48c 130.10MB / 130.10MB 22.4s
=> => sha256:bb9cdec9c7f337940f7d872274353b66e118412cbfd433c711361bcf7922aea4 289.05kB / 289.05kB 6.8s
=> => extracting sha256:5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a264d0221f2d 1.9s
=> => extracting sha256:fce5728aad85a763fe3c419db16885eb6f7a670a42824ea618414b8fb309ccde 0.7s
=> => extracting sha256:76610ec20bf5892e24cebd4153c7668284aa1d1151b7c3b0c7d50c579aa5ce75 1.8s
=> => extracting sha256:60170fec2151d2108ed1420625c51138434ba4e0223d3023353d3f32ffe3cfc2 0.1s
=> => extracting sha256:e98f73de8f0d2ef292f58b004d67bc6e9ee779dcfaff7ebb3964649d4787b872 0.0s
=> => extracting sha256:11f7af24ed9cf47597dd6cf9963bb3e9109c963f0135e869a9e9b4999fdc12a3 0.0s
=> => extracting sha256:49e2d6393f32abb1de7c9395c04c822ceb2287383d5a90998f7bd8dbfd43d48c 4.8s
=> => extracting sha256:bb9cdec9c7f337940f7d872274353b66e118412cbfd433c711361bcf7922aea4 0.1s
=> [2/2] COPY *.jar /app.jar 0.8s
=> exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:323ae3b07fa99e7728798f049f9b6eeedab60faa470540f5a8f4809c4ed75027 0.0s
=> => naming to docker.io/library/hello
#查看镜像是否部署成功
[root@iZ0jl52dacrua17zrm6ii7Z idea]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest 323ae3b07fa9 About a minute ago 662MB
mytomcat 1.0 da03024c5ee6 5 hours ago 684MB
nginx latest 605c77e624dd 16 months ago 141MB
tomcat latest fb5657adc892 16 months ago 680MB
mysql 8.0 3218b38490ce 16 months ago 516MB
[root@iZ0jl52dacrua17zrm6ii7Z idea]# docker run -d -P --name hello-springboot hello
c33309a54541d8ad456ef4e967dd4418098ce6dd01ca2e742008960cec789cd6
[root@iZ0jl52dacrua17zrm6ii7Z idea]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ0jl52dacrua17zrm6ii7Z idea]# docker run -d -P --name hello-springboot hello
c33309a54541d8ad456ef4e967dd4418098ce6dd01ca2e742008960cec789cd6
[root@iZ0jl52dacrua17zrm6ii7Z idea]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c33309a54541 hello "java -jar app.jar -…" 19 seconds ago Up 18 seconds 0.0.0.0:32768->8080/tcp, :::32768->8080/tcp hello-springboot
[root@iZ0jl52dacrua17zrm6ii7Z idea]# curl localhost:32768
{"timestamp":"2023-05-12T08:42:14.263+00:00","status":404,"error":"Not Found","path":"/"}
[root@iZ0jl52dacrua17zrm6ii7Z idea]# curl localhost:32768/hello
Hello,World
发现部署镜像成功!
将镜像部署推送到阿里云,根据操作依次向下
- 登录阿里云Docker Registry
$ docker login --username=你的用户名 registry.cn-wulanchabu.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
- 从Registry中拉取镜像
$ docker pull registry.cn-wulanchabu.aliyuncs.com/hua_231/dockerstudy:[镜像版本号]
- 将镜像推送到Registry
$ docker login --username=馒头_231 registry.cn-wulanchabu.aliyuncs.com
$ docker tag [ImageId] registry.cn-wulanchabu.aliyuncs.com/hua_231/dockerstudy:[镜像版本号]
$ docker push registry.cn-wulanchabu.aliyuncs.com/hua_231/dockerstudy:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
istry中拉取镜像
$ docker pull registry.cn-wulanchabu.aliyuncs.com/hua_231/dockerstudy:[镜像版本号]
- 将镜像推送到Registry
$ docker login --username=馒头_231 registry.cn-wulanchabu.aliyuncs.com
$ docker tag [ImageId] registry.cn-wulanchabu.aliyuncs.com/hua_231/dockerstudy:[镜像版本号]
$ docker push registry.cn-wulanchabu.aliyuncs.com/hua_231/dockerstudy:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
- 选择合适的镜像仓库地址