Docker快速入門

簡介:

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。

一個完整的Docker有以下幾個部分組成:

  1. dockerClient客戶端

  2. Docker Daemon守護進程

  3. Docker Image鏡像

  4. DockerContainer容器

起源:

Docker 是 PaaS 提供商 dotCloud 開源的一個基於 LXC 的高級容器引擎,源代碼託管在 Github 上, 基於go語言並遵從Apache2.0協議開源。

Docker自2013年以來非常火熱,無論是從 github 上的代碼活躍度,還是Redhat在RHEL6.5中集成對Docker的支持, 就連 Google 的 Compute Engine 也支持 docker 在其之上運行。

一款開源軟件能否在商業上成功,很大程度上依賴三件事 - 成功的 user case(用例), 活躍的社區和一個好故事。 dotCloud 自家的 PaaS 產品建立在docker之上,長期維護且有大量的用戶,社區也十分活躍,接下來我們看看docker的故事。

  • 環境管理複雜 - 從各種OS到各種中間件到各種app, 一款產品能夠成功作爲開發者需要關心的東西太多,且難於管理,這個問題幾乎在所有現代IT相關行業都需要面對。

  • 雲計算時代的到來 - AWS的成功, 引導開發者將應用轉移到 cloud 上, 解決了硬件管理的問題,然而中間件相關的問題依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解決這個問題)。開發者思路變化提供了可能性。

  • 虛擬化手段的變化 - cloud 時代採用標配硬件來降低成本,採用虛擬化手段來滿足用戶按需使用的需求以及保證可用性和隔離性。然而無論是KVM還是Xen在 docker 看來,都在浪費資源,因爲用戶需要的是高效運行環境而非OS, GuestOS既浪費資源又難於管理, 更加輕量級的LXC更加靈活和快速

  • LXC的移動性 - LXC在 linux 2.6 的 kernel 裏就已經存在了,但是其設計之初並非爲雲計算考慮的,缺少標準化的描述手段和容器的可遷移性,決定其構建出的環境難於遷移和標準化管理(相對於KVM之類image和snapshot的概念)。docker 就在這個問題上做出實質性的革新。這是docker最獨特的地方。


安裝: 以docker-ce版本爲例

官方文檔

https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1

按照文檔步驟:

1、卸載舊版本

老版本的Docker被稱爲dockerdocker-engine。如果安裝了它們,請卸載它們以及相關的依賴項。

sudo yum remove docker

 

2、新增一個yum

使用以下命令設置穩定的存儲庫。即使您想從邊緣測試存儲庫安裝構建,也總是需要穩定的存儲 庫。

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

yum-config-manage命令找不到  安裝yum-utils

yum -y install yum-utils

 

默認的yum倉庫 沒有docker的最新版

 

3、安裝最新版本的Docker CE,或者轉到下一步安裝特定版本:

 sudo yum install docker-ce

 

4、啓動Docker

sudo systemctl start docker

 

5、docker通過運行hello-world 映像驗證安裝是否正確。

sudo docker run hello-world

 

6開機自啓docker

 

systemctl enable docker

安裝完成


Docker_常用命令

 

Docker -v

查看版本

Search  xxxx

從hub搜索img

Pull xxx:tag

從hub檢出img   tag可以到docker官網查看  一般是版本  不帶tag默認是最新版

imgaes

當前已有docker鏡像

Rmi

刪除鏡像

 

PS:

Docker中國  pull速度更快

docker pull registry.docker-cn.com/library/iamges:tag

例如:

docker pull registry.docker-cn.com/library/rabbitmq:3.7-management

 

 

容器操作

 docker run --name mytomcat -d tomcat:latest

根據鏡像啓動容器 --name 自定義名稱 -d後臺運行 容器名稱:tag。此操作相當於啓動了一個容器,可以啓動多個

 docker ps

查看當前已經運行的容器

docker stop xxx

停止容器 xxx可以是容器id或名稱

Docker ps -a

查看所有容器狀態

docker start xxx

啓動容器

Docker rm xxx

刪除容器

docker run -d -p 8080:8080 tomcat

端口映射 :-p 外部端口:docker端口

Docker exec -it xxxxID /bin/bash

進入容器目錄

docker run --name tomcat -p 8080:8080 -v /zm:/usr/local/tomcat/webapps/ROOT -d 容器id

將容器中的/usr/local/tomcat/webapps/ROOT目錄掛載到容器外部的 zm目錄

 docker inspect xxxx

查看容器各參數情況

鏡像默認存放docker內部目錄

/var/lib/docker/overlay2/

 


示例 安裝Mysql:

1、docker search mysql

2、docker pull mysql

3、docker run --name mysql -d mysql

 

異常  第一次未啓動成功

[root@MiWiFi-R3G-srv ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@MiWiFi-R3G-srv ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES

fcc96724d772        mysql               "docker-entrypoint.s…"   13 seconds ago      Exited (1) 12 seconds ago                       mysql

[root@MiWiFi-R3G-srv ~]# docker logs mysql

error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

正確啓動:

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 

 

 

指定ROOT密碼

 

高級用法

docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:tag

把主機的/conf/mysql文件夾掛載到 mysqldocker容器的/etc/mysql/conf.d文件夾裏面

改mysql的配置文件就只需要把mysql配置文件放在自定義的文件夾下(/conf/mysql);

指定mysql的一些配置參數:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 


Docker打包鏡像:

1、創建Dockerfile文件

內容:

FROM java:8

MAINTAINER zm

add spring-boot-crud-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 8082

ENTRYPOINT ["java","-jar","app.jar"]

 

鏡像爲java 標籤版本爲8

作者爲zm

將spring-boot-crud-0.0.1-SNAPSHOT.jar添加到鏡像中並重命名爲app.jar

運行鏡像 監聽8082端口

啓動是運行java -jar

 

2、編譯鏡像

docker build -t boot/dockerimg ./

boot是前綴  dockerimg 含有dockerfile和項目的目錄

./ 表示dockerfile的文件目錄

3、打包鏡像到tar

docker save 實例ID -o >./myapp.tar

 docker save myapp:latest > ./myapp.tar

 

4、加載鏡像

Docker load < ./myapp.tar

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章