欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

30分鐘帶你了解Docker(推薦)

 更新時(shí)間:2018年08月05日 09:18:51   作者:冷豪  
這篇文章是針對(duì)Java開發(fā)人員的,但Docker的使用場景絕不僅限于此。最后,靈敏意味著可能有一些開發(fā)方式需要調(diào)整,到底如何利用Docker應(yīng)該是當(dāng)你了解它之后需要認(rèn)真思考的問題

最近一直在忙項(xiàng)目,不知不覺2個(gè)多月沒有更新博客了。正好自學(xué)了幾天docker就干脆總結(jié)一下,也順帶增加一篇《30分鐘入門系列》。網(wǎng)上能夠查到的對(duì)于docker的定義我就不再重復(fù)了,說說我自己對(duì)它的理解:Docker一個(gè)方便多次部署的虛擬化Linux容器,與當(dāng)下流行的SpringBoot和微服務(wù)框架搭配更加相得益彰,從而真正的做到從開發(fā)到部署的全流程靈敏。請(qǐng)注意這里的三個(gè)關(guān)鍵詞:Linux容器,SpringBoot,靈敏。首先,Docker不能別用來部署本地應(yīng)用(如果你有開發(fā)過基于Qt的桌面應(yīng)用你就能體會(huì)到運(yùn)行環(huán)境不統(tǒng)一對(duì)于開發(fā)人員來說簡直是噩夢)。其次,這篇博客是針對(duì)Java開發(fā)人員的,但Docker的使用場景絕不僅限于此。最后,靈敏意味著可能有一些開發(fā)方式需要調(diào)整,到底如何利用Docker應(yīng)該是當(dāng)你了解它之后需要認(rèn)真思考的問題。

一、環(huán)境準(zhǔn)備

我個(gè)人的測試環(huán)境為VirtualBox,CentOS7及最新版本的Spring Boot。首先以最小化方式安裝CentOS: 

推薦在安裝階段就默認(rèn)打開網(wǎng)絡(luò)鏈接...接下來等待20分鐘虛擬機(jī)安裝完畢

由于是最小化安裝,完成以后推薦安裝幾條基礎(chǔ)命令:

1. yum update

2. yum install -y net-tools vim curl wget

以上測試環(huán)境就算搭建完成,以下開始安裝Docker。我們進(jìn)入官方網(wǎng)站,他們已經(jīng)很貼心的為我們準(zhǔn)備好了安裝教程。目前我可以登陸Docker的官方網(wǎng)站,并且基于Centos的安裝說明在這里也可以查看。不過為了以防萬一,我在博客中還是記錄一下如果你發(fā)現(xiàn)無法訪問或閱讀英文有些困難直接跟著下面的流程走即可:

1. 卸載系統(tǒng)中的早期版本

$ sudo yum remove docker \
     docker-client \
     docker-client-latest \
     docker-common \
     docker-latest \
     docker-latest-logrotate \
     docker-logrotate \
     docker-selinux \
     docker-engine-selinux \
     docker-engine

2. 安裝工具

$ sudo yum install -y yum-utils \
 device-mapper-persistent-data \
 lvm2

3. 配置Docker的安裝yum原

$ sudo yum-config-manager \
 --add-repo \
 https://download.docker.com/linux/centos/docker-ce.repo

4. 安裝Docker CE

$ sudo yum install docker-ce

5. 啟動(dòng)Docker

$ sudo systemctl start docker

6. 運(yùn)行Hello World

$ sudo docker run hello-world

7. 配置國內(nèi)的鏡像加速

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://57326c54.m.daocloud.io

二、操作指南

網(wǎng)上有關(guān)docker的命令有很多,詳細(xì)的說明各位可以去更權(quán)威的地方查閱。這里我只列舉幾條最重要的命令并加以說明:

1. 查閱鏡像列表:docker images

你應(yīng)該不會(huì)有這么多鏡像,但是至少應(yīng)該存在一條hello-world。沒錯(cuò)這就是你剛剛下載的測試鏡像。

2. 查閱容器列表:docker ps -a

你應(yīng)該也只會(huì)看到一條hello-world的容器。

這里我們已經(jīng)接觸到了有關(guān)docker的第一個(gè)重要概念:鏡像和容器。不過暫時(shí)我還不打算對(duì)這兩個(gè)概念加以說明,我們可以反復(fù)運(yùn)行

$ sudo docker run hello-world

然后再查看容器列表:

沒錯(cuò),你現(xiàn)在發(fā)現(xiàn)多次運(yùn)行同一個(gè)鏡像只會(huì)發(fā)生一次鏡像下載,但是卻會(huì)出現(xiàn)多個(gè)容器。更準(zhǔn)確的說,你運(yùn)行了幾次hello-world就會(huì)生成幾個(gè)容器。

3. 停止和刪除容器:docker stop/rm [container_id]

我們刪除掉所有hello-world容器,瞬間整個(gè)世界變的美好了。

4. 刪除鏡像:docker rmi [image_id]

我們刪除掉hello-world鏡像,世界終于又歸于寂靜。

有了感性認(rèn)識(shí)以后,現(xiàn)在可以說明鏡像和容器的概念:

鏡像就好像是iso文件,docker需要使用鏡像作為源。一個(gè)鏡像可以反復(fù)被使用,而每次當(dāng)docker通過鏡像啟動(dòng)起來的就是一個(gè)容器,容器之間相互隔離。如果容器被刪除了,在容器中的所有改變都會(huì)丟失。

用一張最經(jīng)典的圖來表示鏡像與容器的關(guān)系:

沒錯(cuò),一個(gè)完整的docker項(xiàng)目就應(yīng)該是這樣,在本地系統(tǒng)(boosfs)之上可能存在多個(gè)鏡像(image)它們之間存在繼承關(guān)系,而最上層處于運(yùn)行環(huán)境的就是容器(container)。所有的修改操作都只在容器中。如果容器被關(guān)閉數(shù)據(jù)會(huì)發(fā)生丟失,除非你將容器刻錄為新的鏡像層。不過我們還有別的更好的手段將數(shù)據(jù)保存下來,但不在我們今天的討論中。

5. 獲取鏡像:docker pull [image_name]

**********************************************

請(qǐng)確認(rèn)你已經(jīng)配置了國內(nèi)的鏡像加速:

vim /etc/docker/daemon.json

 配置:

{
"registry-mirrors": ["http://57326c54.m.daocloud.io"]
}

重啟Docker:systermctl restart docker

**********************************************

先查詢一下與CentOS有關(guān)的鏡像

docker search centos

第一個(gè)看上去很“官方”的樣子

docker pull centos:latest

下載完成以后先查詢一下確認(rèn)鏡像沒有問題docker images。

6. 交互的方式來啟動(dòng)鏡像:docker run -it [image_name] [args...]

docker run -it centos /bin/bash

咦?似乎沒有任何變化。再仔細(xì)看看,命令提示符是不是有變化。

沒錯(cuò),你已經(jīng)進(jìn)入了容器,現(xiàn)在是在容器的CentOS操作界面。

7. 安裝Mysql

$ sudo yum install -y wget
$ sudo wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
$ sudo yum install mysql-community-server

配置

$ sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql

啟動(dòng)

$ sudo mysqld_safe

8. 離開容器:Ctrl + q, Ctrl + p

這個(gè)組合鍵是用來退出容器并讓容器在后臺(tái)保持運(yùn)行

9. 重新登陸容器:docker exec -it [container_id] [args...]

docker exec -it 21f99e364fb1 bash

賦予MySQL的root用戶遠(yuǎn)程連接權(quán)限

# mysql -u root

mysql> UPDATE mysql.user SET Password = PASSWORD('12345678') WHERE User = 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION;
mysql> flush privileges;

10. 提交鏡像:docker commit [container_id] [myimage_name:tag]

要提交自己的鏡像首先需要退出當(dāng)前容器:

exit
docker commit 21f99e364fb1 centos:mysql

11. 端口映射:docker run -p [local_port]:[docker_port] -it [image_name] [args...]

docker run -p 3307:3306 -it centos:mysql /bin/bash

這樣我們?cè)诒镜氐牟僮飨到y(tǒng)中就可以通過訪問虛擬機(jī)的3307端口訪問我們?cè)赿ocker中部署的mysql服務(wù)了。

三、構(gòu)建SpringBoot項(xiàng)目的docker鏡像

到目前為止,如果你的操作一切順利代表已經(jīng)掌握了docker的基本使用方法。上面的對(duì)于mysql的安裝其實(shí)只是起到一個(gè)拋磚引玉的作用,目的是讓你熟悉docker的基礎(chǔ)命令,實(shí)際在開發(fā)中我們很少會(huì)將mysql部署在docker中。更常見的一個(gè)開發(fā)場景是將SpringBoot項(xiàng)目生成docker鏡像,下面我們就正式進(jìn)入實(shí)戰(zhàn)環(huán)節(jié)。

1. 在本地先構(gòu)建一個(gè)SpringBoot項(xiàng)目

通過SpringBoot的官網(wǎng)為我們生成一個(gè)基礎(chǔ)項(xiàng)目:

接著通過你喜歡的IDE導(dǎo)入并打開項(xiàng)目,在pom.xml文件中添加依賴:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>1.0.0</version>
 <configuration>
  <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
  <dockerDirectory>src/main/docker</dockerDirectory>
  <resources>
   <resource>
    <targetPath>/</targetPath>
    <directory>${project.build.directory}</directory>
  <include>${project.build.finalName}.jar</include>
  </resource>
 </resources>
 </configuration>
</plugin>

編寫一個(gè)controller文件:

@RestController
public class DockerController {
 @RequestMapping("/")
 public String hello() {
  return "Hello Docker!";
 }
}

現(xiàn)在本地運(yùn)行一下,看看有沒有問題。如果一切正常進(jìn)入下一步。

2. 接下來我們需要將項(xiàng)目放到docker的環(huán)境中去打包

(1) 在虛擬機(jī)中安裝jdk

yum -y install java-1.8.0-openjdk*

(2) 配置環(huán)境變量如下

vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64 
export PATH=$PATH:$JAVA_HOME/bin 

(3) 從Apache官網(wǎng)下載最新版本的maven

tar vxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven3

(4) 配置環(huán)境變量如下

export MAVEN_HOME=/usr/local/maven3
export PATH=PATH:MAVEN_HOME/bin

(5) 使環(huán)境變量生效

source /etc/profile

(6) 編寫DockerFile文件

在main目錄下添加一個(gè)docker目錄并創(chuàng)建DockerFile文件,文件內(nèi)容如下

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD helloboot-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

(7) 接著在項(xiàng)目路徑下使用maven打包

mvn package docker:build

如果中間發(fā)生構(gòu)建失敗可能的原因是你的項(xiàng)目名稱和我的不一樣,請(qǐng)仔細(xì)檢查DockerFile文件,通常在第一次i構(gòu)建中你可能會(huì)遇到各種各樣的錯(cuò)誤信息。放到網(wǎng)上查一下就可以了。

構(gòu)建完成以后我們可以通過docker images查詢一下鏡像列表:

沒錯(cuò)第一個(gè)鏡像就是我們的項(xiàng)目。下面啟動(dòng)這個(gè)鏡像并通過服務(wù)器的80端口來映射:

docker run -p 80:8080 -t springboot/helloboot

最后我們?cè)诒镜赝ㄟ^瀏覽器直接訪問虛擬機(jī)的ip,如果可以看到“Hello Docker!”

說明使用 Docker 部署 Spring Boot 項(xiàng)目成功!

哈哈,30分鐘帶你了解Docker,大家都看明白了嗎?有任何疑問歡迎給小編留言哦,小編很樂意和大家一起學(xué)習(xí)!

相關(guān)文章

  • docker(alpine+golang)?中?hosts?不生效問題解決方法

    docker(alpine+golang)?中?hosts?不生效問題解決方法

    這篇文章主要介紹了docker(alpine+golang)?中?hosts?不生效問題解決大全,本文給大家分享了三種解決方法,每種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • idea使用docker生成鏡像(打包鏡像,導(dǎo)入鏡像,導(dǎo)出鏡像)

    idea使用docker生成鏡像(打包鏡像,導(dǎo)入鏡像,導(dǎo)出鏡像)

    使用docker鏡像,可以快速地部署和運(yùn)行應(yīng)用程序,而無需擔(dān)心環(huán)境差異、依賴項(xiàng)問題等,本文主要介紹了idea使用docker生成鏡像,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • docker測試時(shí)候命令無法補(bǔ)全的解決方法

    docker測試時(shí)候命令無法補(bǔ)全的解決方法

    因?yàn)樽罱趯W(xué)習(xí)使用Docker,所以出現(xiàn)了好多的問題,昨天遇到的一個(gè)問題是在docker測試時(shí)候發(fā)現(xiàn)命令無法補(bǔ)全,通過查找資料最后解決了,現(xiàn)在將方法分享給有需要的人,大家可以參考學(xué)習(xí)。
    2016-11-11
  • Docker 環(huán)境配置以及問題解決方案

    Docker 環(huán)境配置以及問題解決方案

    這篇文章主要介紹了Docker 環(huán)境配置以及問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Docker創(chuàng)建MySQL的講解

    Docker創(chuàng)建MySQL的講解

    今天小編就為大家分享一篇關(guān)于Docker創(chuàng)建MySQL的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Docker部署Go項(xiàng)目發(fā)布鏡像到倉庫

    Docker部署Go項(xiàng)目發(fā)布鏡像到倉庫

    這篇文章主要為大家介紹了Docker部署Go項(xiàng)目發(fā)布鏡像到倉庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • docker數(shù)據(jù)卷容器掛載不上的解決方法

    docker數(shù)據(jù)卷容器掛載不上的解決方法

    docker容器之間可以通過相互掛載實(shí)現(xiàn)數(shù)據(jù)共享,本文主要介紹了docker數(shù)據(jù)卷容器掛載不上的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 使用docker-tc對(duì)host容器進(jìn)行限流的操作方法

    使用docker-tc對(duì)host容器進(jìn)行限流的操作方法

    docker-tc是一個(gè)github開源項(xiàng)目,這篇文章主要介紹了使用docker-tc對(duì)host容器進(jìn)行限流,需要的朋友可以參考下
    2024-04-04
  • Docker搭建Redis主從復(fù)制的實(shí)現(xiàn)步驟

    Docker搭建Redis主從復(fù)制的實(shí)現(xiàn)步驟

    本文主要介紹了Docker搭建Redis主從復(fù)制的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Dockerfile為鏡像添加SSH服務(wù)的實(shí)現(xiàn)步驟

    Dockerfile為鏡像添加SSH服務(wù)的實(shí)現(xiàn)步驟

    利用 SSH 協(xié)議可以有效防止遠(yuǎn)程管理過程中的信息泄露問題,本文主要介紹了Dockerfile為鏡像添加SSH服務(wù)的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論