ping不通docker_初識docker

前言

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

今天給大家帶來的是一篇docker的科普入門篇,本文不會像其他文章一樣進行枯燥無味的純概念性介紹,docker是如何如何的好,用了docker就如何如何的6,而是以一個項目實戰讓大家從感性上認識一下docker,在做項目的過程中了解熟悉一些命令,然后在去看概念的東西會更容易上手。

本次實戰的架構圖如下,搭建一套Nginx+Spring Boot+MyBatis+MySQL的docker環境。

4e9d604013cf3d8168f6938c9c73f863.png

工具準備

首先我們需要一臺centos的機器操作,先吹下牛啊,因為我有錢任性,買了三臺云服務器,平時搭一些redis、kafak、zk等中間件做實驗用,一年期的,也快到期了,小伙們如果不像我這么任性的話可以用vmware或者virtualbox等虛擬機操作哦,我這里選的是第一臺106.12.84.31的機器。

50a99e9fd181da5c6ca27c8d239a987b.png

安裝docker

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

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、設置docker倉庫  [設置阿里云鏡像倉庫可以先自行百度,后面課程也會有自己的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復制代碼

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

[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復制代碼

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

7890954a06aa03686dfdb81425bf24c8.png

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

科普

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

安裝MySQL

1)、首先創建自定義網橋,為什么要創建網橋,因為這么多容器都是要放在這一個網段里的,而在不同網段上的container是ping不通的

docker network create --subnet=172.18.0.0/24 jack-netdocker network ls                 [查看所有網絡]docket network inspect jack-net   [查看詳情]docker network rm jack-net        [刪除]復制代碼

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

docker pull mysql復制代碼

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

docker volume create v1復制代碼

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

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復制代碼

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

name:jack-mysqlip:106.12.84.31       [宿主機的ip]   端口:3306             [宿主機端口]user:rootpassword:jack123      [創建container時我們設的密碼]復制代碼
22b4ea503ec481e1b9872428e9ced114.png

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

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);復制代碼

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

73d8abb4a48ed9364fe63267a68bde3f.png

???????????????????????????????????? 插入一條數據

mysql到此就準備好了

安裝Spring Boot項目

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

fb004544872b0e0ac6fd1b859fc0f187.png

????????????????????????????????????項目結構

這里寫的是mysql container的ip地址和端口,因為在同一個網段中,容器之間不僅可以通過ip訪問,也可以通過名稱,因為內置了一個DNS的解析,即jdbc:mysql://my-mysql:3306/xxxxx

6c32fd9735d3e463b861829e06be2806.png

2)、將項目進行打包,在項目的target下找到"springboot-mybatis-0.0.1-SNAPSHOT.jar"

mvn clean package -Dmaven.test.skip=true復制代碼

3)、在centos7創建一個文件夾

mkdir -p xhj/springboot-mybatis復制代碼

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

yum install lrzszrz -y復制代碼

5)、創建并且編寫dockerfile,好,這里的關鍵來了,我們平時生成container是把別人已經制作好的image拉取下來,而現在這是我們自己的項目,所以這個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"]復制代碼

6)、生成image鏡像

docker build -t sbm-image .復制代碼

查看一下,我們自己的image已經生成好了

d2be92ef41431810a6d5ddb8094014b4.png

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

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復制代碼

查看一下,至此,我們自己項目和mysql的container都已經生成好了

f541b6924e6fecf9db4b27a6f372d924.png

安裝Nginx

好,現在是最后一步了,勝利的曙光就在眼前

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

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;}復制代碼

2)、拉取nginx鏡像

docker pull nginx復制代碼

3)、創建nginx容器,通過掛載的方式,container中的配置文件就是讀取我們宿主機中創建的配置文件,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復制代碼

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

http://宿主機ip/user/listall復制代碼
28e1cacb19c53aee73547468203b40b6.png

至此,大功告成,我們的docker初體驗圓滿成功!

總結

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

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

最后我們要保持一個空杯心態,小伙伴看完以后可能會覺得運維也不過如此,其實不然,這只是冰山一角,真實中的運維場景會比這復雜很多,比如

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

總之,要學的還有很多,感謝大家的收看,如果你覺得不錯,請動手點個贊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271258.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H5基礎標簽

一、字體標簽 1.text-indent:首行縮進 2.text-decoration:文本修飾(text-decoration:none;除去文字的下劃線;text-decoration:line-through;文字上加刪除線) 3.letter-spacing&#…

SQL語言基礎:數據庫語言概念介紹

1、概念介紹SQL(Structured Query Lanauage)結構化查詢語言是關系數據庫中最普遍使用的語言。主要包括查詢、數據操縱、數據定義、數據控制功能,是一種通用的、功能強大的關系數據庫的標準語言。2、SQL語言分類2.1 數據庫定義語言&#xff08…

configuration 命名空間_kubernetes30:monitoring命名空間處于Terminating狀態的處理方法...

刪除monitoring命名空間時總也無法徹底刪除,發現monitoring處于Terminating狀態,故有此文。kubectl get namespaces -o wide解決:嘗試使用force delete。kubectl delete namespace monitoring --force --grace-period0發現強制刪除沒有成功。…

SQL語言基礎:SQL語言概念知識筆記

1、SQL標準ANSI(美國國家標準機構)SQL對ANSI SQL進行修改后在1992年采用的標準SQL-92或SQL2SQL-99或SQL3標準從SQL2擴充而來,增加了對象關系特征和許多其他新的功能。最近的標準版本是SQL:20032、SQL的特點綜合統一:SQ…

重定向與轉發

使用重定向方法sendRedirect()將用戶重新定向到一個JSP頁面或另一個Servlet。 RequestDispatcher對象調用void forward(ServletRequest request,ServletResponse response) 方法可以將用戶對當前JSP頁面或Servlet的請求轉發給RequestDispatcher對象所指定的JSP頁面或Servlet。 …

ubuntu mysql 內存滿了_Ubuntu mysql可以把data防止到內存盤中

作者:李祥敬2010-03-04/17:57Ubuntu mysql對于電腦使用的玩家的常用軟件,然后我就學習及深入的研究Ubuntu mysql,在這里和大家一起探討Ubuntu mysql的使用方法,希望對大家有用。1、如果Ubuntu mysql的data數據很少,內存…

原型(Prototype)的場景是不支持循環依賴的

原型(Prototype)的場景是不支持循環依賴的,通常會走到AbstractBeanFactory類中下面的判斷,拋出異常。

網絡工程中,VLAN到底有什么作用?

什么是VLAN呢?VLAN(Virtual Local Area Network)即虛擬局域網,是將一個物理的LAN在邏輯上劃分成多個廣播域的通信技術。在IEEE802.1Internetworking委員會結束了對VLAN初期標準的修訂工作的時候。新出臺的標準進一步完善了VLAN的體…

java的decode_Java decode機試題

/**** java編寫encode方法和decode方法,機試題 請你用java,c,c* 中任何一種語言實現兩個函數encode()和decode(),分別實現對字符串的變換和復原。* 變換函數encode()順序考察以知字符串的字符,按以下規則逐組生成新字符…

hrjava項目原型html_Mockplus for Mac(原型設計工具)

Mockplus for Mac是Mac平臺上一款簡單、快速的原型設計工具,無需任何編程,不需要任何編程基礎知識,幫你快速使用Mockplus設計圖形。Mockplus封裝了近200個組件,提供3000個以上的圖標素材。做圖時,只需要把這些組件放入…

Leetcode 給定一個數組,給定一個數字。返回數組中可以相加得到指定數字的兩個索引

問題內容是:給定一個數組,給定一個數字。返回數組中可以相加得到指定數字的兩個索引。 比如:給定nums [2, 7, 11, 15], target 9 那么要返回 [0, 1],因為2 7 9 這道題的優解是,一次遍歷HashMap: 先去…

java 正則表達式 提取ip_java正則表達式提取地址中的ip和端口號

由于我需要用到java正則表達式提取地址中的ip和端口號,所以我就寫了一個demo,測試一下,下面是demopublic class Test0810_1 {public static void main(String[] args) {//通過控制板輸入想要輸入的地址,然后測試是否符合規則Scann…

SQL語言基礎:常用的數據查詢語句

1、創建表語法格式&#xff1a;creat table <表名> (<,列名><數據類型>[列級完整性約束條件]<,列名><數據類型>[列級完整性約束條件]...[,<表級完整性約束條件>]);列級完整性約束條件&#xff1a;主鍵、外鍵 、唯一 unique、檢查 、默認值…

兩個不同網段的局域網如何互通_不同網段之間如何通信?

計算機之前是如何實現互相通信的呢&#xff1f;正文首先&#xff0c;計算機之間通信人為設定一個準則&#xff0c;這個準則是什么呢&#xff1f;如果兩臺計算機在一個相同網段&#xff0c;不需要輔助設備(網關)的幫助&#xff0c;可以直接通信。如果兩臺計算機在不同網段&#…

Java是值傳遞還是引用傳遞?

Java是值傳遞&#xff1a; &#xff08;1&#xff09;基本類型作為參數傳遞時&#xff0c;是傳遞值的拷貝&#xff0c;無論你怎么改變這個拷貝&#xff0c;原值是不會改變的&#xff1b; &#xff08;2&#xff09;對象的引用作為參數傳遞時&#xff0c;是把對象在內存中的地址…

SpringCloud Gateway的組成結構

SpringCloud Gateway結構 SpringCloud Gateway的底層基于Netty&#xff0c;主要組成有Predicates&#xff08;謂詞或者斷言&#xff09;、Route&#xff08;路由&#xff09;、Filter&#xff08;過濾器&#xff09; 思維導圖----------SpringCloud Gateway的組成&#xff1a; …

java resource放入的文件沒有生成在classes中_快速部署版@開源在線考試系統一鍵生成各種題型試卷且實時判卷...

首先聲明此項目來自開源網&#xff0c;小編也是愛好者&#xff1b;閱讀本文之前相信已經閱讀過【開源在線考試系統一鍵生成各種題型試卷且可以實時判卷】開源在線考試系統一鍵生成各種題型試卷且可以實時判卷本文分享快速部署版jar包&#xff0c;原項目前后臺是單獨項目&#x…

java 三大框架面試題

1.Hibernate工作原理及為什么要用&#xff1f; 原理&#xff1a; 1.讀取并解析配置文件 2.讀取并解析映射信息&#xff0c;創建SessionFactory3.打開Session 4.創建事務Transation 5.持久化操作 6.提交事務 7.關閉Session 8.關閉SesstionFactory 為什么要用&#xff1a; 1. 對J…

SQL語言基礎:SQL中的數據完整性約束用法

前言數據庫的完整性是指數據庫正確性和相容性&#xff0c;是防止合法用戶使用數據庫時向數據庫加入不符合語義的數據&#xff0c;從而保證了數據庫中的數據是正確的&#xff0c;避免非法的更新操作。1、主鍵約束1.1 完整性約束條件完整性約束條件作用的對象有關系、元組、列三種…

SpringCloud Gateway的工作方式

SpringCloud Gateway工作方式 從官網的圖來看&#xff0c;并不是特別復雜&#xff0c;首先客戶端請求都會先經過Gateway Handler Mapping&#xff0c;匹配上就通過Gateway Web Handler轉給過濾器處理&#xff0c;過濾器分為PreFilter&#xff08;前置過濾器&#xff09;、PostF…