Docker简介以及mysql和redis的部署
一.Docker簡介
1.環境配置的難題
軟件開發最大的麻煩事之一,就是環境配置。用戶計算機的環境都不相同,你怎么知道自家的軟件,能在那些機器跑起來?
用戶必須保證兩件事:操作系統的設置,各種庫和組件的安裝。只有它們都正確,軟件才能運行。
如果某些老舊的模塊與當前環境不兼容,那就麻煩了。開發者常常會說:”它在我的機器可以跑了”,言下之意就是,其他機器很可能跑不了。
環境配置如此麻煩,換一臺機器,就要重來一次,曠日費時。很多人想到,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地復制過來。
2.什么是虛擬化
虛擬化,是指通過虛擬化技術將一臺計算機虛擬化為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統。
傳統虛擬機:VMware,VisualBox
每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給它的資源將全部被占用。
虛擬機是完整的操作系統,一些系統級別的操作步驟,往往無法跳過,比如用戶登錄。
Docker的優勢:
1.更快速的交付和部署
例如:開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之后,運維人員可以直接使用這個容器來部署代碼。
Docker啟動時間可以做到秒級甚至毫秒級的啟動時間,大大節約了開發.測試.部署的時間
2.高效的部署和擴容
Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。
Docker 容器可以隨開隨關,很適合動態擴容和縮容。
3.更高的資源利用率
Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小。
總結:
| 啟動 | 秒級 | 分鐘級 |
| 硬盤使用 | 一般為MB | 一般為GB |
| 性能 | 接近原生 | 弱于原生 |
| 系統支持量 | 單機支持上千個容器 | 一般幾十個 |
3.核心概念
1.鏡像
Docker 鏡像(Image)就是一個只讀的模板。
Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。
例如:一個鏡像可以包含一個完整的操作系統環境,里面僅安裝了 Apache 或用戶需要的其它應用程序。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。
2.容器
鏡像和容器的關系,就像是java中的類和實例一樣。
Docker 利用容器(Container)來運行應用。容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺??梢园讶萜骺醋鍪且粋€簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
3.倉庫
倉庫(Repository)是集中存放鏡像文件的場所。有時候會把倉庫和倉庫注冊服務器(Docker Registry)混為一談,并不嚴格區分。實際上,倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括 時速云 、網易云 等
Docker官網:
https://hub.docker.com/
二.Docker安裝
1.MacOS安裝
方式一:
如果系統中已安裝Homebrew Cask,可以在終端中運行如下命令直接安裝.
Homebrew是一款Mac OS平臺下的軟件包管理工具,擁有安裝、卸載、更新、查看、搜索等很多實用的功能。
1.安裝Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.卸載HomeBrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"3.安裝Docker
$ brew cask install docker方式二:
https://download.docker.com/
在鏈接中下載對應版本的Docker。
2.運行
在應用圖標中找到Docker圖標并點擊運行
運行之后,會在右上角菜單欄看到多了一個小鯨魚的圖標。
啟動終端,可以通過命令檢查安裝后的Docker版本
docker --version嘗試運行一個nginx服務器:
docker run -d -p 80:80 --name webserver nginx服務運行后,可以訪問http://localhost
停止服務并刪除:
docker stop webserver docker rm webserverdocker在Linux設置開機自啟
sudo systemctl enable docker三.Docker鏡像操作
1.Docker鏡像是由文件系統疊加而成。最低端是一個文件引入系統,即bootfs,這很像典型的linux/Unix的引導文件系統。
1.列出鏡像
docker images tag:鏡像標簽 Imageid:鏡像id created:鏡像的創建日期 size:鏡像大小2.拉取鏡像
docker pull centos:73.搜索鏡像
docker search 鏡像名稱 name:倉庫名稱 description:鏡像描述 stars:用戶評價 official:是否官方 automated:自動構建4.刪除鏡像
docker rmi $IMAGE_ID:刪除指定鏡像docker rmi 'docker images -q':刪除所有鏡像?
三.Docker容器操作
創建容器命令
docker run-i:表示運行容器 -t:表示容器啟動后進入其命令行。 --name:為創建的容器命名 -v:表示目錄映射關系 -d:創建一個守護式容器在后臺運行 -p:表示端口映射,前者是宿主機端口,后者是容器內的映射端口??梢允褂枚鄠€-p做多個端口映射交互式容器
docker run -it --name=mycentos centos:7 /bin/bashbash:放在鏡像后的是命令,這里我們希望有個交互式shell,因此用的是bash退出當前容器,該容器也隨之停止。
守護式容器
docker run -di --name=mycentos2 centos登錄守護式容器方式
docker exec -it container_name查看容器
docker ps -a:查看所有容器 docker ps -l:查看最后一次運行的容器 docker ps:查看正在運行的容器停止與啟動容器
docker stop $container_name/id啟動已運行過的容器
docker start $container_name/id刪除容器
docker rm $container_id/name:刪除指定容器 docker rm 'docker ps -a -q':刪除所有容器刪除none的鏡像,要先刪除鏡像中的容器。要刪除鏡像中的容器,必須先停止容器。
$ docker images$ docker rmi $(docker images | grep "none" | awk '{print $3}')?直接刪除帶none的鏡像,直接報錯了。提示先停止容器。
$ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')?//停止容器$ docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')?//刪除容器$ docker rmi $(docker images | grep "none" | awk '{print $3}')?//刪除鏡像文件拷貝
如果我們需要將文件拷貝到容器內可以使用cp命令
docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄也可以將文件從容器內拷貝出來
docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄四.Mysql部署
拉取mysql鏡像
docker pull mysql創建mysql容器
docker run -di --name=my_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql -p:代表端口映射 -e:代表添加環境變量詳細啟動命令:
docker run -p 3306:3306 --name my_mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7參數說明: -p 3306:3306:將容器的3306端口映射到主機的3306端口-v /mydata/mysql/log:將日志文件夾掛載到主機-v /mydata/mysql/data:/var/lib/mysql:將data文件夾掛載到主機-v /mydata/mysql/conf:/etc/mysql:將配置文件夾掛載到主機-e MYSQL_ROOT_PASSWORD=root:初始化root用戶的密碼進入Mysql容器,登錄mysql
docker exec -it my_mysql /bin/bash登錄Mysql
mysql -u root -p遠程登錄mysql(可以使用navicat類似的圖形化工具遠程登錄)
我們可以在剛才掛載過的目錄下修改配置文件/mydata/mysql/conf
vi my.cnf[client] default-character-set=utf8[mysql] default-character-set=utf8[mysqld] init_connect=‘SET collation_connection = utf8_unicode_ci’ init_connect=‘SET NAMES utf8’ character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve然后重啟我們的mysql服務
docker restart my_mysql設置mysql開機自啟
docker update --restart=always 容器id五.Redis部署
拉取redis鏡像
docker pull redis啟動redis容器
docker run -di --name=my_redis -p 6379:6379 redis也可以指定掛載和配置文件來啟動
# 啟動前先創建文件,否則docker可能會把redis.conf當成目錄來處理 mkdir -p /mydata/redis/conf touch /mydata/redis/conf/redis.confdocker run -p 6379:6379 --name my_redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf客戶端測試
docker exec -it my_redis redis-cli我們可以進行操作,設置一些key。
但是我們發現并沒有持久化,redis重啟后緩存就都失效了
我們可以修改redis的配置文件redis.conf
# 開啟持久化 appendonly yes之后我們重啟后數據就不會丟失了
更多的redis配置可以查看官方文檔
總結
以上是生活随笔為你收集整理的Docker简介以及mysql和redis的部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSM整合shiro框架相关配置文件
- 下一篇: Java Optional 的 orEl