日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ping不通docker_初识docker

發(fā)布時(shí)間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ping不通docker_初识docker 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

大家好,我是jack xu,本篇是我在今日頭條的首秀,我的英文名來源于jack ma,馬云,所以大家也可以叫我徐云,即我希望像馬云一樣富有、成功,另外我名字中的杰與jack也是諧音關(guān)系。

今天給大家?guī)淼氖且黄猟ocker的科普入門篇,本文不會像其他文章一樣進(jìn)行枯燥無味的純概念性介紹,docker是如何如何的好,用了docker就如何如何的6,而是以一個(gè)項(xiàng)目實(shí)戰(zhàn)讓大家從感性上認(rèn)識一下docker,在做項(xiàng)目的過程中了解熟悉一些命令,然后在去看概念的東西會更容易上手。

本次實(shí)戰(zhàn)的架構(gòu)圖如下,搭建一套Nginx+Spring Boot+MyBatis+MySQL的docker環(huán)境。

工具準(zhǔn)備

首先我們需要一臺centos的機(jī)器操作,先吹下牛啊,因?yàn)槲矣绣X任性,買了三臺云服務(wù)器,平時(shí)搭一些redis、kafak、zk等中間件做實(shí)驗(yàn)用,一年期的,也快到期了,小伙們?nèi)绻幌裎疫@么任性的話可以用vmware或者virtualbox等虛擬機(jī)操作哦,我這里選的是第一臺106.12.84.31的機(jī)器。

安裝docker

工欲善其事必先利其器,既然要玩docker,那肯定是要先裝docker是吧,這里我也放了個(gè)菜鳥的鏈接,很簡單,大家照著操作就行。菜鳥鏈接

1、卸載之前的docker(可選)sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 2、 安裝必要的依賴sudo yum install -y yum-utils device-mapper-persistent-data lvm23、設(shè)置docker倉庫 [設(shè)置阿里云鏡像倉庫可以先自行百度,后面課程也會有自己的docker hub講解]sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo4、安裝dockersudo yum install -y docker-ce docker-ce-cli containerd.io5、啟動dockersudo systemctl start docker6、測試docker安裝是否成功sudo docker run hello-world復(fù)制代碼

安裝完docker后是不是萬事大吉,其實(shí)不然,還差一步,當(dāng)我們在拉取鏡像的時(shí)候就會如下所示,卡主不動了,等幾個(gè)小時(shí)可能也不會好,這時(shí)候就需要我們安裝鏡像加速器。

[root@localhost ~]# docker pull mysqlUsing default tag: latestlatest: Pulling from library/mysql0a4690c5d889: Already exists 98aa2fc6cbeb: Already exists 0777e6eb0e6f: Already exists 2464189c041c: Already exists b45df9dc827d: Already exists b42b00086160: Already exists bb93567627c7: Already exists b9125bcebe66: Already exists d263609b23c7: Downloading [=============================> ] 27.63MB/46.88MBc9adffb2afb9: Download complete a555d31b3e6c: Download complete 9524d219b6db: Download complete復(fù)制代碼

登錄阿里云的官網(wǎng),注冊個(gè)賬號,然后點(diǎn)擊左側(cè)菜單的最下面,如我用紅框標(biāo)出來的,把鏡像加速器配置好即可,這個(gè)原理就像我們拉取maven的jar包時(shí)一樣,也會配阿里云的倉庫,所以讓我們一起感謝阿里,造福碼農(nóng)。

配置好以后,就可以開始我們后面的操作了,我們從后往前開始安裝,即mysql->spring boot->nginx

科普

docker中有兩個(gè)重要的概念,一個(gè)是image,一個(gè)container,image就是鏡像,什么是鏡像。類比一下,就是我們在重裝系統(tǒng)的時(shí)候都要用ghost鏡像,這是由人家制作好的,這個(gè)鏡像上可能有各種各樣的軟件,而把這個(gè)鏡像在每一臺電腦上把系統(tǒng)重裝好,就是一個(gè)實(shí)例,就是我們所說的container。一個(gè)image可以生成多個(gè)container。

安裝MySQL

1)、首先創(chuàng)建自定義網(wǎng)橋,為什么要創(chuàng)建網(wǎng)橋,因?yàn)檫@么多容器都是要放在這一個(gè)網(wǎng)段里的,而在不同網(wǎng)段上的container是ping不通的

docker network create --subnet=172.18.0.0/24 jack-netdocker network ls [查看所有網(wǎng)絡(luò)]docket network inspect jack-net [查看詳情]docker network rm jack-net [刪除]復(fù)制代碼

2)、拉取鏡像,不加版本默認(rèn)拉取最新的,也可以指定版本mysql:5.7

docker pull mysql復(fù)制代碼

3)、創(chuàng)建volume,為什么需要volume,你可以理解為持久化,mysql保存的數(shù)據(jù)都是存在磁盤上的,我們需要把docker中生成的數(shù)據(jù)掛載到宿主機(jī)上

docker volume create v1復(fù)制代碼

4)、創(chuàng)建mysql容器,-d是后臺運(yùn)行,--name是給container起的名字,-v就是掛載,-p是端口映射,docker中的3306映射到宿主機(jī)的3306,-e是密碼,--net是使用哪個(gè)網(wǎng)段,--ip是在這個(gè)網(wǎng)段中用的地址

docker run -d --name jack-mysql -v v1:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=jack123 --net=jack-net --ip 172.18.0.6 mysql復(fù)制代碼

5)、接下來我們來做測試,用navicate連接,執(zhí)行.mysql文件新建表

name:jack-mysqlip:106.12.84.31 [宿主機(jī)的ip] 端口:3306 [宿主機(jī)端口]user:rootpassword:jack123 [創(chuàng)建container時(shí)我們設(shè)的密碼]復(fù)制代碼

???????????????????????????????????? 連接成功

create schema jack_springboot collate utf8mb4_0900_ai_ci;use jack_springboot;create table t_user(id int not nullprimary key,username varchar(50) not null,password varchar(50) not null,number varchar(100) not null);復(fù)制代碼

???????????????????????????????????? 建表語句

???????????????????????????????????? 插入一條數(shù)據(jù)

mysql到此就準(zhǔn)備好了

安裝Spring Boot項(xiàng)目

1)、首先搭建一個(gè)springboot +mybatis項(xiàng)目,這個(gè)很簡單,簡單的三層架構(gòu),這里我放上我github的地址,github.com/xuhaoj/spri… 大家可以star一下

????????????????????????????????????項(xiàng)目結(jié)構(gòu)

這里寫的是mysql container的ip地址和端口,因?yàn)樵谕粋€(gè)網(wǎng)段中,容器之間不僅可以通過ip訪問,也可以通過名稱,因?yàn)閮?nèi)置了一個(gè)DNS的解析,即jdbc:mysql://my-mysql:3306/xxxxx

2)、將項(xiàng)目進(jìn)行打包,在項(xiàng)目的target下找到"springboot-mybatis-0.0.1-SNAPSHOT.jar"

mvn clean package -Dmaven.test.skip=true復(fù)制代碼

3)、在centos7創(chuàng)建一個(gè)文件夾

mkdir -p xhj/springboot-mybatis復(fù)制代碼

4)、安裝文件傳輸工具,將"springboot-mybatis-0.0.1-SNAPSHOT.jar"上傳到該目錄下

yum install lrzszrz -y復(fù)制代碼

5)、創(chuàng)建并且編寫dockerfile,好,這里的關(guān)鍵來了,我們平時(shí)生成container是把別人已經(jīng)制作好的image拉取下來,而現(xiàn)在這是我們自己的項(xiàng)目,所以這個(gè)image需要我們自己做,而制作的原材料就是dockerfile

vi DockerfileFROM openjdk:8MAINTAINER itcrazy2016LABEL name="springboot-mybatis" version="1.0" author="itcrazy2016"COPY springboot-mybatis-0.0.1-SNAPSHOT.jar springboot-mybatis.jarCMD ["java","-jar","springboot-mybatis.jar"]復(fù)制代碼

6)、生成image鏡像

docker build -t sbm-image .復(fù)制代碼

查看一下,我們自己的image已經(jīng)生成好了

7)、最后一步,通過我自己制作的image生成三個(gè)springboot項(xiàng)目容器,這里的命令和生成mysql的一樣,不在重復(fù)說明

docker run -d --name sb01 -p 8081:8081 --net=jack-net --ip 172.18.0.11 sbm-imagedocker run -d --name sb02 -p 8082:8081 --net=jack-net --ip 172.18.0.12 sbm-imagedocker run -d --name sb03 -p 8083:8081 --net=jack-net --ip 172.18.0.13 sbm-image復(fù)制代碼

查看一下,至此,我們自己項(xiàng)目和mysql的container都已經(jīng)生成好了

安裝Nginx

好,現(xiàn)在是最后一步了,勝利的曙光就在眼前

1)、在宿主機(jī)中xhj/nginx目錄下新建一個(gè)nginx.conf文件,這里的ip和端口還是container自己的ip和端口,不要填寫宿主機(jī)的

user nginx;worker_processes 1;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; location / { proxy_pass http://balance; } } upstream balance{ server 172.18.0.11:8081; server 172.18.0.12:8081; server 172.18.0.13:8081; } include /etc/nginx/conf.d/*.conf;}復(fù)制代碼

2)、拉取nginx鏡像

docker pull nginx復(fù)制代碼

3)、創(chuàng)建nginx容器,通過掛載的方式,container中的配置文件就是讀取我們宿主機(jī)中創(chuàng)建的配置文件,so easy

docker run -d --name my-nginx -p 80:80 -v /xhj/nginx/nginx.conf:/etc/nginx/nginx.conf --network=jack-net --ip 172.18.0.10 nginx復(fù)制代碼

4)、最后我們用postman來驗(yàn)證一下,這里nginx配的是80端口,http默認(rèn)端口就是80,所以我不需要在加端口

http://宿主機(jī)ip/user/listall復(fù)制代碼

至此,大功告成,我們的docker初體驗(yàn)圓滿成功!

總結(jié)

小伙伴看完這篇文章有沒有感覺很神奇,區(qū)區(qū)幾個(gè)命令就把這么多東西給部署起來了。而在此之前就是各種各樣的安裝,繁瑣的配置,試想該項(xiàng)目中只是用了mysql,而真正項(xiàng)目中還會用到redis、kafak、zookeeper等中間件的使用,這些東西還不能只是單機(jī),還要考慮集群高可用,那無異于運(yùn)維成本是相當(dāng)大的,而使用了docker就會簡單很多。

大家可以跟著做一下,或者不愿意做的話看完這篇文章至少會對docker有一個(gè)感性的認(rèn)識,很多時(shí)候我們做java開發(fā),只要我們代碼往上一推,過一會編譯部署以后新功能就能訪問到了,這一系列的CI/CD背后就是強(qiáng)大的工具技術(shù)支持jenkins、docker、k8s,這些運(yùn)維團(tuán)隊(duì)都幫我們做好了,俗話說技多不壓身,我們在做開發(fā)的同時(shí)還需要了解一些運(yùn)維知識來充實(shí)自己。

最后我們要保持一個(gè)空杯心態(tài),小伙伴看完以后可能會覺得運(yùn)維也不過如此,其實(shí)不然,這只是冰山一角,真實(shí)中的運(yùn)維場景會比這復(fù)雜很多,比如

  • 今天這多container都是一個(gè)個(gè)敲命令,重復(fù)工作很多,也很累,尤其是端口、映射、掛載啊多了以后完全分不清,這時(shí)候就要用到docker compose技術(shù),這是相當(dāng)于一個(gè)yml文件,可以一鍵幫我們部署
  • 而且這么多container都是部署在單機(jī)上,當(dāng)container很多的時(shí)候一臺機(jī)器是扛不住,而且很多時(shí)候我們會做高可用,存在多機(jī)部署的情況,這就需要用到docker swarm和k8s等容器編排技術(shù)
  • 本項(xiàng)目中用的mysql也是單機(jī),而如果我們要做mysql集群的話還需要用到haproxy+pxc技術(shù) .....

總之,要學(xué)的還有很多,感謝大家的收看,如果你覺得不錯,請動手點(diǎn)個(gè)贊。

總結(jié)

以上是生活随笔為你收集整理的ping不通docker_初识docker的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。