Docker
作业练习
作业一:Docker 安装Nginx
#1. 搜索镜像 search 建议大家去docker搜索,可以看到帮助文档 [root@centos-7 /]# docker search nginx #2. 拉取下载镜像 pull [root@centos-7 /]# 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 #3. 查看是否下载成功镜像 [root@centos-7 /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 4 months ago 141MB hello-world latest feb5d9fea6a5 7 months ago 13.3kB centos latest 5d0da3dc9764 8 months ago 231MB #3. 运行测试 # -d 后台运行 # --name 给容器命名 # -p 宿主机端口:容器内部端口 [root@centos-7 /]# docker run -d --name nginx01 -p 3344:80 nginx be7b075ec8e14b1f790653d09e1d43dc5d56f6d2304583fd007e0fbdbc393ce3 #4. 查看正在启动的镜像 [root@centos-7 /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES be7b075ec8e1 nginx "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01 [root@centos-7 /]# 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> #5. 进入容器 [root@centos-7 /]# docker exec -it nginx01 /bin/bash root@be7b075ec8e1:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@be7b075ec8e1:/# cd etc/nginx root@be7b075ec8e1:/etc/nginx# ls conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params #6. 退出容器 root@be7b075ec8e1:/etc/nginx# exit exit #7. 停止容器 [root@centos-7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES be7b075ec8e1 nginx "/docker-entrypoint.…" 19 minutes ago Up 19 minutes 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01 [root@centos-7 ~]# docker stop be7b075ec8e1 be7b075ec8e1
作业二:用docker 来装一个tomcat
# 下载 tomcat9.0 # 之前的启动都是后台,停止了容器,容器还是可以查到, docker run -it --rm 镜像名 一般是用来测试,用完就删除 [root@centos-7 ~]# docker run -it --rm tomcat:9.0 --rm Automatically remove the container when it exits 用完即删 #下载 最新版 [root@centos-7 ~]# docker pull tomcat #查看下载的镜像 [root@centos-7 ~]# docker images #以后台方式,暴露端口方式,启动运行 [root@centos-7 ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat e4867d753b33d5afb87c5f1c0645458d612aeb06b38221c2cc413fd78cc5d7a1 #测试访问有没有问题 curl localhost:3355 #根据容器id进入tomcat容器 [root@centos-7 ~]# docker exec -it tomcat01 /bin/bash root@e4867d753b33:/usr/local/tomcat# #查看tomcat容器内部内容: root@e4867d753b33:/usr/local/tomcat# ls -l total 132 -rw-r--r--. 1 root root 18994 Dec 2 22:01 BUILDING.txt -rw-r--r--. 1 root root 6210 Dec 2 22:01 CONTRIBUTING.md -rw-r--r--. 1 root root 60269 Dec 2 22:01 LICENSE -rw-r--r--. 1 root root 2333 Dec 2 22:01 NOTICE -rw-r--r--. 1 root root 3378 Dec 2 22:01 README.md -rw-r--r--. 1 root root 6905 Dec 2 22:01 RELEASE-NOTES -rw-r--r--. 1 root root 16517 Dec 2 22:01 RUNNING.txt drwxr-xr-x. 2 root root 4096 Dec 22 17:07 bin drwxr-xr-x. 1 root root 22 May 15 09:20 conf drwxr-xr-x. 2 root root 4096 Dec 22 17:06 lib drwxrwxrwx. 1 root root 80 May 15 09:20 logs drwxr-xr-x. 2 root root 159 Dec 22 17:07 native-jni-lib drwxrwxrwx. 2 root root 30 Dec 22 17:06 temp drwxr-xr-x. 2 root root 6 Dec 22 17:06 webapps drwxr-xr-x. 7 root root 81 Dec 2 22:01 webapps.dist drwxrwxrwx. 2 root root 6 Dec 2 22:01 work #进入webapps目录 root@e4867d753b33:/usr/local/tomcat# cd webapps root@e4867d753b33:/usr/local/tomcat/webapps# ls # 发现问题:1、linux命令少了。 2.webapps目录为空 # 原因:阿里云镜像的原因,阿里云默认是最小的镜像,所以不必要的都剔除掉 # 保证最小可运行的环境! # 解决方案: # 将webapps.dist下的文件都拷贝到webapps下即可 root@e4867d753b33:/usr/local/tomcat/webapps# cd .. root@e4867d753b33:/usr/local/tomcat# ls BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work root@e4867d753b33:/usr/local/tomcat# cd webapps.dist/ root@e4867d753b33:/usr/local/tomcat/webapps.dist# ls ROOT docs examples host-manager manager root@e4867d753b33:/usr/local/tomcat/webapps.dist# cd .. root@e4867d753b33:/usr/local/tomcat# cp webapps.dist/* webapps cp: -r not specified; omitting directory 'webapps.dist/ROOT' cp: -r not specified; omitting directory 'webapps.dist/docs' cp: -r not specified; omitting directory 'webapps.dist/examples' cp: -r not specified; omitting directory 'webapps.dist/host-manager' cp: -r not specified; omitting directory 'webapps.dist/manager' root@e4867d753b33:/usr/local/tomcat# cp -r webapps.dist/* webapps root@e4867d753b33:/usr/local/tomcat# cd webapps root@e4867d753b33:/usr/local/tomcat/webapps# ls ROOT docs examples host-manager manager root@e4867d753b33:/usr/local/tomcat/webapps# clear
[root@centos-7 ~]# docker stop tomcat01 tomcat01
作业三:部署elasticsearch+kibana
# es 暴露的端口很多! # es 十分耗内存 # es 的数据一般需要放置到安全目录!挂载 # --net somenetwork ? 网络配置 # 启动elasticsearch [root@centos-7 ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 # 测试一下es是否成功启动 ➜ ~ curl localhost:9200 { "name" : "d73ad2f22dd3", "cluster_name" : "docker-cluster", "cluster_uuid" : "atFKgANxS8CzgIyCB8PGxA", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } [root@centos-7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a3d8a35d6d0 elasticsearch:7.6.2 "/usr/local/bin/dock…" 2 minutes ago Up 2 minutes 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch #测试成功就关掉elasticSearch,防止耗内存 [root@centos-7 ~]# docker stop elasticsearch elasticsearch [root@centos-7 ~]# docker stats # 查看docker容器使用内存情况
#测试成功就关掉elasticSearch,可以添加内存的限制,修改配置文件 -e 环境配置修改 ➜ ~ docker rm -f d73ad2f22dd3 # stop命令也行 ➜ ~ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
➜ ~ curl localhost:9200 { "name" : "b72c9847ec48", "cluster_name" : "docker-cluster", "cluster_uuid" : "yNAK0EORSvq3Wtaqe2QqAg", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Portainer 可视化面板安装
portainer(先用这个) docker run -d -p 8080:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer 1 2 Rancher(CI/CD再用) 什么是portainer? Docker图形化界面管理工具!提供一个后台面板供我们操作! # 安装命令 [root@iz2zeak7sgj6i7hrb2g862z ~]# docker run -d -p 8080:9000 \ > --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer Unable to find image 'portainer/portainer:latest' locally latest: Pulling from portainer/portainer d1e017099d17: Pull complete a7dca5b5a9e8: Pull complete Digest: sha256:4ae7f14330b56ffc8728e63d355bc4bc7381417fa45ba0597e5dd32682901080 Status: Downloaded newer image for portainer/portainer:latest 81753869c4fd438cec0e31659cbed0d112ad22bbcfcb9605483b126ee8ff306d
commit镜像
# 1、启动一个默认的tomcat [root@centos-7 ~]# docker run -it -p 8080:8080 tomcat # 新开终端 [root@centos-7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 982fe943e9d7 tomcat "catalina.sh run" 34 seconds ago Up 33 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp recursing_hawking # 2、发现这个默认的tomcat 是没有webapps应用,官方的镜像默认webapps下面是没有文件的! [root@centos-7 ~]# docker exec -it 982fe943e9d7 /bin/bash root@982fe943e9d7:/usr/local/tomcat# cd webapps root@982fe943e9d7:/usr/local/tomcat/webapps# ls # 3、从webapps.dist拷贝文件进去webapp root@982fe943e9d7:/usr/local/tomcat/webapps# cd .. root@982fe943e9d7:/usr/local/tomcat# cp -r webapps.dist/* webapps root@982fe943e9d7:/usr/local/tomcat# cd webapps root@982fe943e9d7:/usr/local/tomcat/webapps# ls ROOT docs examples host-manager manager root@982fe943e9d7:/usr/local/tomcat/webapps# exit exit [root@centos-7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 982fe943e9d7 tomcat "catalina.sh run" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp recursing_hawking # 4、将操作过的容器通过commit调教为一个镜像!我们以后就使用我们修改过的镜像即可,而不需要每次都重新拷贝webapps.dist下的文件到webapps了,这就是我们自己的一个修改的镜像。 # docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG] docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0 [root@centos-7 ~]# docker commit -a="kuangshen" -m="add webapps app" 982fe943e9d7 tomcat02:1.0 sha256:ee799efb15e116df45b6cb160df5835143671e2ba7a49d8ecb83f60b9babdaa7 [root@centos-7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat02 1.0 ee799efb15e1 34 seconds ago 684MB nginx latest 605c77e624dd 4 months ago 141MB tomcat 9.0 b8e65a4d736d 4 months ago 680MB tomcat latest fb5657adc892 4 months ago 680MB redis latest 7614ae9453d1 4 months ago 113MB hello-world latest feb5d9fea6a5 7 months ago 13.3kB centos latest 5d0da3dc9764 8 months ago 231MB portainer/portainer latest 580c0e4e98b0 14 months ago 79.1MB elasticsearch 7.6.2 f29a1ee41030 2 years ago 791MB
实战:安装mysql
# 获取mysql镜像 [root@centos-7 home]# docker pull mysql:5.7 # 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点! # 参考官网hub docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag #启动我们得 -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 -- name 容器名字 [root@centos-7 home]# docker run -d -p 3310:3306 -v /home/mysql/cong:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 2fde0f16de852a7bf012108ea641d4ea8a03aa81b33dc2f08ac50aca4efa9e55 # 启动成功之后,我们在本地使用sqlyog来测试一下 # sqlyog-连接到服务器的3306--和容器内的3306映射 # 在本地测试创建一个数据库,查看一下我们映射的路径是否ok!
实战:创建自己的centos
# 1./home下新建dockerfile目录 $ mkdir dockerfile # 2. dockerfile目录下新建mydockerfile-centos文件 $ vim mydockerfile-centos # 3.编写Dockerfile配置文件 FROM centos:7.9.2009 # 基础镜像是官方原生的centos MAINTAINER jsss<3063494684@qq.com> # 作者 ENV MYPATH /usr/local # 配置环境变量的目录 WORKDIR $MYPATH # 将工作目录设置为 MYPATH RUN yum -y install vim # 给官方原生的centos 增加 vim指令 RUN yum -y install net-tools # 给官方原生的centos 增加 ifconfig命令 EXPOSE 80 # 暴露端口号为80 CMD echo $MYPATH # 输出下 MYPATH 路径 CMD echo "-----end----" CMD /bin/bash # 启动后进入 /bin/bash # 4.通过这个文件构建镜像 # 命令: docker build -f 文件路径 -t 镜像名:[tag] . $ docker build -f mydockerfile-centos -t mycentos:0.1 . # 5.出现下图后则构建成功
[root@centos-7 dockerfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 0.1 8c3f60cee961 2 days ago 592MB [root@centos-7 dockerfile]# docker run -it mycentos:0.1 [root@0beb63cf5408 local]# pwd /usr/local [root@0beb63cf5408 local]# [root@0beb63cf5408 local]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet) RX packets 9 bytes 737 (737.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@0beb63cf5408 local]# vim test [root@0beb63cf5408 local]# exit exit
[root@centos-7 dockerfile]# docker history mycentos:0.1 IMAGE CREATED CREATED BY SIZE COMMENT 8c3f60cee961 2 days ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B 06a984690c44 2 days ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B d29c4289257d 2 days ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B 27233e5bac56 2 days ago /bin/sh -c #(nop) EXPOSE 80 0B d547eebab45a 2 days ago /bin/sh -c yum -y install net-tools 166MB 14a669c6f02d 2 days ago /bin/sh -c yum -y install vim 221MB 7c9cf43722eb 2 days ago /bin/sh -c #(nop) WORKDIR /usr/local 0B 1f8188f956b5 2 days ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B 201b72b82ab0 2 days ago /bin/sh -c #(nop) MAINTAINER jsss<306349468… 0B eeb6ee3f44bd 8 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 8 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 8 months ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4… 204MB [root@centos-7 dockerfile]#