Docker入門為什麼可以這麼簡單?
前言
只有光頭才能變強。
文字已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y
上一篇已經講解了為什麼需要Docker?,相信大家已經對Docker有一個簡單的認識了。
這篇我來講講Docker入門的相關概念和常用的命令,跟大家一起入門Docker!
一、Docker相關術語
一般從零學習一門技術(語言),都是從HelloWorld開始的,但這次我偏不。我先來講講Docker的相關術語~
映象
容器
倉庫
在之前分享的Docker科普文,也通俗易懂地講解了這三個術語:
映象、容器、倉庫的概念可以類比程式碼、程式、github
如果讓我來給完全不懂Docker解釋這三個術語,我會這樣做:
映象就是映象,我們重灌系統/搞虛擬機器的時候都要用映象,沒映象哪來系統
我們安裝完映象,就可以跑起來一個系統(Windows也好、Centos也好),於是我們就可以愉快地使用我們通過映象安裝好的系統了。
在Docker中,通過映象執行起來的東西叫做容器
倉庫就是專門存放映象的地方
映象(image)【image除了圖片/影像的意思外,還有映象的意思】
容器(container)通過映象執行起來的例項
倉庫(reposity)專門存放映象的地方
二、安裝Docker與HelloWorld
首先需要明確自己所使用的環境,就我而言,我使用的是CentOS 7
。據我所知,CentOS 7
和CentOS 6.8
在安裝中都是有區別的。
所以,如果你想跟著我一起安裝Docker,先明確自己的版本是否是CentOS 7
,如果不是隻能找其他的教程來進行安裝。
cat /etc/redhat-release
// 結果
CentOS Linux release 7.3.1611 (Core)
2.1安裝Docker
首先我們需要安裝GCC相關的環境:
// 安裝GCC相關的環境
yum -y install gcc
yum -y install gcc-c++
如果曾經安裝過Docker(舊版本)的話,得先解除安裝,如果沒有安裝過,跳過這一步:
// 解除安裝舊Docker版本
yum -y remove docker docker-common docker-selinux docker-engine
安裝Docker需要的依賴軟體包:
// 安裝Docker需要的依賴軟體包:
yum install -y yum-utils device-mapper-persistent-data lvm2
設定stable映象倉庫(注意:我們這裡使用國內的映象地址【因為Docker 官網給出的地址在國外,太慢了!】)
// 設定stable映象倉庫:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum軟體包索引:
// 更新yum軟體包索引:
yum makecache fast
安裝DOCKER CE(注意:Docker分為CE版和EE版,一般我們用CE版就夠用了)
// 安裝DOCKER CE:
yum -y install docker-ce
啟動Docker
// 啟動Docker
systemctl start docker
2.2HelloWorld走起
到上面為止,我們已經啟動了Docker,下面我們檢驗一下我們執行的Docker是否正常。
首先,我們可以看看下載回來的Docker版本:
// 檢視Docker的版本
docker version
版本都查到了,說明Docker是執行起來的啦。我們來一發HelloWorld:
// docker的HelloWorld
docker run hello-world
效果:
簡單解釋:docker run hello-world
這條命令指示Docker去執行hello-world
這個映象,但是我們本地沒有這份映象啊。所以Docker就去DockerHub
拉取了一份hello-world
映象,並執行起來了(生成容器)。這個hello-world
容器的功能就是一句話:Hello from Docker!
。所以我們在螢幕上就可以看到這句話了。
2.3配置加速器
由於安裝的Docker預設是去Docker Hub
找我們想要的映象的,我們知道國外肯定沒國內的快,所以我們一般會配置一個加速器
國內的映象倉庫一般我們使用的有:
阿里雲
網易雲
// 等等
首先,我們到下面連結搜尋一下映象,比如Tomcat
(這就需要我們註冊/登入一個阿里雲賬號)
https://promotion.aliyun.com/ntms/act/kubernetes.html
隨後,我們可以在映象加速器
上找到我們的url:
我們依照阿里雲給出的教程,就可以配置加速器了。
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://cubmirje.mirror.aliyuncs.com"]
}
EOF
讓配置生效,並重啟Docker
systemctl daemon-reload
systemctl restart docker
不知道大家學到這裡,覺得怎麼樣。如果是我,我肯定覺得沒意思。搞了個HelloWorld案例,就列印了一句話,沒意思。
三、體驗Docker
假如說,要在一臺全新的系統上將Tomcat跑起來。我們需要做以下的事:
安裝Java,配置環境變數
安裝Tomcat
如果我們用了Docker,我們是這樣做的:直接在倉庫里拉一份tomcat的映象下來,將映象跑起來就,就完事了!
拉取Tomcat映象:
docker pull tomcat
docker images檢視是否有拉取到的tomcat
docker image ls
拉取到的Tomcat映象:
執行這個Tomcat映象,生成容器
docker run -it -p 9999:8080 tomcat
我們可以發現,這個Tomcat執行起來了!
(滾犢子,沒執行起來,踩坑了!,一直卡在INFO: Deploying web application directory
這句話上了。我還一直想,為啥我訪問不到呢,才發現沒執行起來)
3.1解決docker執行Tomcat卡住的問題
原因:
docker+tomcat 啟動時非常慢,一般正常啟動幾十秒的,發現docker+tomcat啟動竟需要幾分鐘,不可思議
根本原因是 SecureRandom 這個 jre 的工具類的問題。那為什麼 SecureRandom generateSeed 這麼慢,甚至掛在 Linux 作業系統呢?
Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 類產生安全隨機類 SecureRandom 的例項作為會話 ID。
SecureRandom generateSeed 使用 /dev/random 生成種子。但是 /dev/random 是一個阻塞數字生成器,如果它沒有足夠的隨機資料提供,它就一直等,這迫使 JVM 等待
首先,我們先以後臺的方式執行Tomcat映象:
docker run -tid tomcat
以bash的方式進入到容器中:
docker exec -it 4a471223bfc4(為你正在執行容器的id) /bin/bash
為容器安裝vim:
apt-get update
apt-get install vim
修改對應的java.security
檔案
cd /docker-java-home/jre/lib/security
vim java.security
找到 securerandom.source=file:/dev/random
,修改為securerandom.source=file:/dev/./urandom
在Tomcat映象下建立一個屬於我們自己的Tomcat映象(這個映象安裝了vim,修改了配置檔案)
docker commit -m "change java.security" -a "3y" 4a471223bfc4(為當前容器的id) mytomcat
於是我們就生成了mytomcat映象,就可以使用mytomcat:
docker run -it -p:9999:8080 mytomcat
效果圖:
參考資料:
docker 啟動tomcat慢的解決方法
https://my.oschina.net/lwenhao/blog/1830538
JRE /dev/random阻塞
https://www.cnblogs.com/lemon-flm/p/7396627.html
除了Tomcat,大家還可以去拉個mysql、redis、centos等等映象來玩玩~~
四、命令說明
Docker的命令無非就是對映象、對容器進行增刪改查。我是不太喜歡拉出每個命令來寫文章的,所以這些命令還是大家自行學習吧~~
之前收集資料的時候,我也找到了一張關於Docker的思維導圖,對著來看看,感覺就沒問題了:
最後
留下幾個問題:
我們知道Tomcat執行起來需要Java的支援,那麼我們在Docker拉取下來的Tomcat映象是不是也有Java環境呢?
容器退出了(好比Linux程式退出了),容器的資料就沒了,我們想要保留容器內的資料,怎麼辦?
從上面我們可以看出,通過commit可以在原有的容器基礎上,建立出屬於我們自己的映象,還有其他方式建立新的映象嗎?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900354/viewspace-2564291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SpringMVC入門就這麼簡單SpringMVC
- SpringDataJPA入門就這麼簡單Spring
- Docker 入門:什麼是 Docker ?Docker
- 什麼是Docker?Docker可以幹什麼?Docker
- Python為什麼發展這麼快速?原因很簡單!Python
- 為什麼Linux這麼的與眾不同呢?Linux入門Linux
- 什麼是Docker?為什麼使用docker?Docker
- 區塊鏈技術為什麼可以這麼牛?區塊鏈
- 為什麼在 Apple Silicon 上裝 Docker 這麼難APPDocker
- docker 怎麼入門?Docker
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- 提高職場效率,原來可以這麼簡單
- Phper 學 C 興趣入門 -為什麼有的字串處理這麼難PHP字串
- 樸素貝葉斯入門例項之就是這麼簡單
- Python為什麼這麼熱門?學習Python有什麼好處?Python
- 為什麼要用dockerDocker
- 為什麼要用docker?Docker
- 為什麼需要Docker?Docker
- 為什麼插畫在UI設計中這麼火?新手想學怎麼入門?UI
- Java程式設計師工資為什麼這麼高?想要入門Java怎麼辦?Java程式設計師
- 為什麼python比c更簡單Python
- 【資料庫】簡單聊聊資料庫可以做什麼,有什麼用?資料庫
- Dagger2 簡單入門三部曲(一)——是什麼?
- redis是單執行緒的,為什麼這麼快Redis執行緒
- 新手如何入門linux,linux原來還可以這麼學Linux
- 數字門店是什麼,這專案可以做嗎?
- 為什麼 Python 這麼慢?Python
- 為什麼Python這麼慢?Python
- 為什麼Julia這麼快?
- 為什麼前端這麼多人前端
- Redis為什麼這麼快?Redis
- Nginx 為什麼這麼快?Nginx
- jdbc就是這麼簡單JDBC
- WebSocket就是這麼簡單Web
- WebService就是這麼簡單Web
- jwt 就是這麼簡單JWT
- ThreadLocal就是這麼簡單thread
- Elasticsearch就這麼簡單Elasticsearch