如今不少公司項目部署都是採用K8S docker容器方式,出門面試被問的機率極大,若是被面試官問docker相關知識點直接懵逼,那麼基本就是被pass了,除非其餘方面技術過硬。因此這種相對前沿的技術,就算達不到精通的程度,起碼仍是要了解基礎理論和操做html
一.安裝docker
Docker要求運行在Centos 7上,要求系統爲64位,系統內核版本3.10以上java
-
uname -an
查看當前系統版本nginx -
yum -y install docker
下載安裝docker程序員 -
service docker start
啓動docker服務面試 -
docker version
檢查docker是否安裝成功redis
當看到下圖的信息,就是表示本機docker已經安裝成功,很簡單docker
在這裏插入圖片描述centos
二.鏡像操做
建立容器要以鏡像爲基礎,因此先講下docker鏡像的操做瀏覽器
搜索鏡像bash
docker images ll
查看下本機的是否已經有了鏡像
目前機器裏尚未鏡像,去Docker Hub下載(鏡像還可自定義,這裏就不細說了)
docker search java
,還能指定具體的版本進行下載,
例如:docker search Ubuntu:1.2.5.4,能夠進行搜docker Hub 會列出不少鏡像
在這裏插入圖片描述
下載鏡像
docker pull docker.io/nginx
進行下載
下載到本地的鏡像要比docker Hub上搜索出來的要大,由於下載過程當中自動解壓了,在查看鏡像列表就有了剛纔下載的鏡像
列表包含了倉庫名,版本標籤,鏡像ID,建立時間以及所佔用的空間
在這裏插入圖片描述
刪除鏡像
刪除沒用的鏡像docker rmi 鏡像id
在這裏插入圖片描述
三.容器的操做
前邊咱們已經下載好了Nginx的鏡像,接下來咱們就建立一個只有Nginx應用的容器
docker run -i -t /bin/bash
-i
:標準輸入給容器
-t:
分配一個虛擬終端
/bin/bash:
執行bash腳本
docker run -idt --name container_nginx -p 8080:80 docker.io/nginx
啓動一個使用鏡像docker.io/nginx
,名字container_nginx
的容器,-p 8080:80
表示將容器的80端口映射到主機的8080端口,這樣咱們只要訪問主機的8080端口就能夠訪問到容器的服務了。
注意:name
前面是兩個-
, 端口前面有-p
, docker.io/nginx
是鏡像名,8080
是主機的端口,80
是Nginx應用的端口
主機上的一個端口只能映射一個容器端口,不能夠多個容器端口對應一個主機端口(若是容器安裝的centos類的系統,那麼容器端口隨便設定,但若是容器內只是單純的應用,那麼容器端口要是應用自身的端口)
在這裏插入圖片描述
這樣咱們就建立並啓動了一個容器!
exit
退出容器
docker ps
查看運行中的容器
docker ps -a
查看運行中和非運行中的全部容器
docker exec -it container_nginx /bin/bash
進入容器若是容器還未啓動 執行
docker start container_nginx
進入容器後啓動Nginx
whereis nginx 找Nginx的啓動目錄
[root@iz2zehzeir87zi8q99krk1z ~]# docker start container_nginx container_nginx [root@iz2zehzeir87zi8q99krk1z ~]# docker exec -it container_nginx /bin/bash root@84683e425116:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@84683e425116:/# /usr/sbin/nginx
此時在瀏覽器訪問 http://51.110.218.9:8080/ 就能夠直接訪問容器內的Nginx
在這裏插入圖片描述
若是訪問不成功,多是主機端口的防火牆開着,執行下邊的命令關閉
/ sbin / iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
因爲我用的阿里雲服務器,因此須要在阿里雲把8080端口開放
在這裏插入圖片描述
刪除容器
容器刪除以前先將容器中止
docker stop container_nginx
或者是容器的id
docker rm -f container_nginx
容器刪除
docker start 與 docker run 的區別
docker start name
啓動一個已經建立的容器
docker run
建立並啓動一個容器
docker run
命令實際上是 docker create
和 docker start
的命令組合,先執行docker create
建立一個容器 再接着docker start
啓動
主機和容器文件相互複製
從主機複製到容器 sudo docker cp host_path containerID:container_path 從容器複製到主機 sudo docker cp containerID:container_path host_path
請注意,以上這兩個命令都是在主機中執行的,不能再容器中執行
docker cp container_nginx:/usr/local/xin.txt /usr/local/software/ 容器向主機複製文件 docker cp /usr/local/xinzhifu.txt container_nginx:/usr/local/ 主機向容器複製文件
這樣一個基礎的docker容器就建立完了 。。。。。。。。。。。。
反過來你們再看一看docker的容器與鏡像的區別 https://www.cnblogs.com/linjiaxin/p/7381421.html
那麼其實鏡像與容器的本質區別並不大,那麼鏡像能夠生成容器 ,容器是否能夠作成鏡像呢?
docket commit container_nginx image_nginx:v1
在這裏插入圖片描述
container_nginx
容器名
image_nginx:v1
本身起一個鏡像的名字:版本號
這樣作有什麼好處呢?
例如:A、B兩臺機器都想安裝redis,A機器上建立容器並在容器中作好redis的一切配置,讓後將這個容器docker commit 成鏡像image_redis,B機器也想要安裝redis,直接用鏡像image_redis建立容器就好了,docker就是作這樣一勞永逸的事情。
並且傳統方式得在每臺機器上安裝配置redis很是麻煩
四.鏡像的導入與導出
鏡像壓縮打包 (主機上進行操做),有兩種方式 docker save
與 docker load
和 docker export 與 docker import
docker save nginx | gzip > nginx_xin_image.tar.gz 將現有的鏡像壓縮打包
docker load -i nginx_xin_image.tar.gz 壓縮的鏡像解壓
docker images 進行查看
docker save
是直接將鏡像進行打包 docker save <鏡像名>或<鏡像id>
docker export container_nginx> nginx_image.tar cat nginx_image.tar | sudo docker import - nginx_image:import
docker export
是直接將容器進行打包 docker export <容器名>或<容器id>
須要注意兩種方法配套的,切不可混用。雖然導入導出時沒問題,可是在建立容器時候會報錯
若是使用import導入save產生的文件,雖然導入不提示錯誤,可是啓動容器時會提示失敗,
會出現相似"docker: Error response from daemon: Container command not found or does not exist"的錯誤。
相似,使用load載入export產生的文件,也會出現問題。
先寫到這,文章略顯粗糙,但願對您有一點用,學無止境加油!
整理了幾百本各種技術電子書,有須要的同窗公號[ 程序員內點事 ]內回覆[ 666 ]自取。技術羣快滿了,想進的同窗能夠加我好友,和大佬們一塊兒吹吹技術。