docker基礎


第一步: 環境 VMware 15 + centos 7.x + xshell 5 + winscp(傳文件用)

https://www.cnblogs.com/jiangzongyou/p/12036985.html

 

第二步: 安裝docker

視頻地址: https://www.bilibili.com/video/av75620482?p=20

1. yum包更新到最新

sudo yum update

2. 安裝需要的軟件包,yum-util提供yum-config-manager功能, 另外兩個是devicemapper驅動依賴包

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

3. 設置yum源為阿里雲(為了防止因網絡問題導致的docker安裝失敗)

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4. 安裝docker-ce, (ce是社區版免費的, ee是企業版收費的)

sudo yum install docker-ce

5. 查看當前docker版本

docker -v

6. 設置docker的鏡像為ustc, (ustc docker mirror是老牌子的linux鏡像提供者了, 不需要注冊, 公共服務)

(默認是沒有該文件的,請先建一個)

ustc官方介紹:  http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker

其實ustc並不好用, 阿里雲好用, 參考阿里雲加速  https://blog.csdn.net/julien71/article/details/79760919

mkdir -p /etc/docker
cd /etc/docker
touch daemon.json
vi /etc/docker/daemon.json

在該文件中輸入以下內容 :

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}


# 每次修改這個文件后都要記得重啟docker
systemctl daemon-reload
systemctl restart docker

7. 啟動與停止docker

systemctl start docker   # 啟動
systemctl status docker # 查看當前docker狀態 "Active: active (running) 代表運行中" "Active: inactive (dead) 代表關閉"
systemctl stop docker # 停止
systemctl restart docker # 重啟
systemctl enable docker # 設置成開機自動啟動
docker info # 查看詳細信息
docker --help # 查看具體有哪些命令,以及怎么用

第三步: 鏡像命令

1. 查看鏡像

docker images

 鏡像名稱是可以相同的, tag經常被當做版本號來使用

Active: active (running) 代表運行中

2. 網上搜索鏡像

docker search centos

 

3. 從中央倉庫拉取鏡像(如果卡主了,就ctrl+c停止, 再重新拉取)

docker pull tutum/centos  # 默認是直接拉取該倉庫的最新版本, 可以用 docker pull tutum/centos:14.04 來指定版本
docker pull centos # 這個官方的當前是必備

4. 刪除鏡像

docker rmi 鏡像ID   #需要當前鏡像下的所有容器都停止或全被刪除,才能刪除鏡像

 

第五步: 容器命令

1. 查看容器(一個鏡像可以創建多個容器)

docker ps     #  查看正在運行的容器
docker ps -a # 查看所有容器,包括開機的和關機的
docker ps -l # 查看最后一次運行的容器

 2. 創建容器

(1) 交互式方式創建容器

docker run -it --name=容器名稱 鏡像名稱:標簽 /bin/bash  #  容器名稱必須唯一,如果標簽是lastest就可以省略不寫,/ban/bash的作用是因為容器的運行至少需要一個進程, 這里就指定用命令行作為啟動命令
docker run -it --name=mycentos centos /bin/bash # 這里我們用官方的centos來創建沒有centos容器,回車后會自動進行該容器,用ls命令查看便知, 再使用docker ps就能看到現在正在運行的該容器
exit # 退出當前容器環境,docker ps里面會顯示Exited

(2) 守護式方式創建容器

docker run -id --name=容器名稱 鏡像名稱:標簽  # 守護式不需要/bin/bash
docker run -id --name=mycentos2 centos # 容器名稱必須唯一,創建后不會自動進入,但其實后台在運行,返回一長串字符串代表創建成功
docker exec -it mycentos2 /bin/bash # 需要手動進入該容器
exit # 退出當前容器環境, 但不會真正退出,后台還是在運行, docker ps里面會顯示Up

(3) 停止與啟動

docker stop mycentos2  # 這才真正停止了這個容器, 也可以用 docker stop cd6c52a90b1b 這種方式
docker start mycentos2 # 啟動容器(必須要啟動容器后,才能夠進入容器)

(4) 往容器中拷貝文件

docker cp /root/anaconda-ks.cfg mycentos2:/usr/local  # 往容器里拷貝文件, 需要退出容器在宿主機上才能執行這個命令
docker cp mycentos2:/usr/local/anaconda-ks.cfg /root/anaconda-ks22.cfg # 從容器里面往外拷貝文件,需要退出容器在宿主機上才能執行這個命令

(5) 目錄掛載: 方便往容器中拷貝文件( -v 宿主機目錄:容器目錄, 如果目錄不存在會自動創建)

docker run -id --name=mycentos3 -v /usr/local/mycentos3Files:/usr/local/myfiles centos # 只要修改了宿主機/usr/local/mycentos3Files里面的內容,那么容器mycentos3的/usr/local/myfiles會相應的改變

如果共享的是多級的目錄, 可能會出現權限不足的提示

因為Centos7的安全模塊selinux把權限禁掉了, 我們需要添加參數 --privileged=true 來解決掛載目錄沒有權限的問題

(6) 查看容器ip

docker inspect mycentos3 # 查看容器mycentos3的所有信息
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3 # 只看ip的內容

(7) 刪除容器

docker rm mycentos # 需要改容器處於停止狀態

 

第六步: 常用應用部署

1. mysql部署

(1) 拉取mysql鏡像

docker pull centos/mysql-57-centos7

(2) 創建容器( 端口映射: -p 宿主機端口:容器端口, MYSQL_ROOT_PASSWORD設置密碼)

docker run -id --name=test_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

 (3) 接下來使用navicat連接這個mysql

 

 

2. tomcat部署

(1) 拉取鏡像

docker pull tomcat:7-jre7

(2) 創建容器

docker run -id --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

(3) 下載別人已經部署好的cas.war, 下載地址:  https://github.com/hjzgg/cas-overlay-template-.2.7/blob/master/target/cas.war

用xshell傳到/root目錄下后轉移他, 然后在瀏覽器中輸入  ip:9000/cas去訪問

mv cas.war /usr/local/webapps

 

3. Nginx部署

(1) 拉取鏡像

docker pull nginx

(2) 創建容器

docker run -id --name=mynginx -p 80:80 nginx

(3) 進入容器並查看nginx的html放在哪兒的

docker exec -it mynginx /bin/bash  # 進入容器
cat /etc/nginx/nginx.conf # 查看nginx配置, 可以發現 ''include /etc/nginx/conf.d/*.conf''
cat /etc/nginx/conf.d/default.conf # 進入這個配置文件,可發現 "root /usr/share/nginx/html;" 說明nginx的主頁就放在這兒的
cd /usr/share/nginx/html # 進入這個文件夾就可以發現, 50x.html  index.html 這兩個文件,說明找對了

(4) 接下來自己就可以把自己想用的靜態文件夾改名為html,去覆蓋nginx的html文件夾就ok了

 

4. Nginx部署

(1) 拉取鏡像

docker pull redis

(2) 創建容器

docker run -id --name=myredis -p 6379:6379 redis

(3) 用windows的redis連接虛擬機上的redis容器, 以下示例說明連接成功

 

 

第七步: 備份與遷移

1. 容器備份

docker commit mynginx mynginx_i   # 把容器備份成鏡像
docker images             # 可以看到多了一個mynginx_i鏡像
docker run -id --name=mynginx2 -p 81:80 mynginx_i # 再用這個鏡像來創建容器
接下里在windows瀏覽器里輸入"宿主機ip:81" # 訪問成功, 說明這個容器備份成功

2 鏡像導入導出

docker save -o mynginx.tar mynginx_i   # 把鏡像導出成文件(不指定路徑的話,就在當前文件夾生成)
docker stop mynginx2            # 把剛剛開啟的容器停止掉
docker rm mynginx2            # 刪除這個容器
docker rmi mynginx_i          # 刪除這個鏡像
docker images               # 可見,mynginx_i這個鏡像不在了
docker load -i mynginx.tar       # 導入鏡像
docker images               # 可見,mynginx_i這個鏡像恢復了(說明是可以帶名字恢復的)

 

第八步: Dockerfile

什么是Dockerfile? 轉載 https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html

1. 基於 centos 7 創建 jdk8 鏡像

jdk8 官網下載地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

mkdir -p /usr/local/dockerjdk8  # 創建一個文件夾, 並把下載的jdk8-linux移動到里面
cd /usr/local/dockerjdk8 # 進入到該目錄
vi Dockerfile # 創建Dockerfile文件,固定寫法,注意大小寫

  FROM centos:7  # 指定基礎鏡像,如果沒有centos:7, 那么它就會自動下載centos7
  MAINTAINER me  # 聲明鏡像創建者
  RUN mkdir /usr/local/java  # 創建一個目錄
  ADD jdk-8u121-linux-x64.tar.gz /usr/local/java  # 自動把該文件解壓到指定目錄下

  ENV JAVA_HOME=/usr/local/java/jdk1.8.0_121  # 創建環境變量,讓我們在任何地方都能使用jdk命令,jdk1.8.0_121是解壓后的文件夾的名字,不要輸錯
  ENV JRE_HOME $JAVA_HOME/jre
  ENV CLASSPATH $JAVA_HOME/bin/dt/jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
  ENV PATH $JAVA_HOME/bin:$PATH

  --- wq 保存退出 ---

docker build -t='jdk1.8' .   # 創建 jdk1.8 鏡像,指定Dockfile的文件路徑時當前文件夾, 有個點 .  別忘記

docker images   # 可以看到多了一個 jdk1.8 鏡像, 說明創建成功

如下

 

 

第九步: Docker私有倉庫

掃盲轉載: https://www.cnblogs.com/jaazz/p/9334183.html

1. 下載registry

docker pull registry   # 下載
docker run -id --name=registry -p 5000:5000 registry  # 創建容器,映射端口為5000
接下來去測試一下是否搭建成功

接下來去配置daimon.json文件, 讓docker信任私有地址, 我們才能上傳鏡像到私有倉庫

vi /etc/docker/daemon.json  
  {
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.101.189:5000"] # 把自己的宿主機的ip和5000端口加進去
  }
  --- wq 保存退出 ---

systemctl restart docker # 需要重啟docker, 重啟成功則說明配置成功,否則去檢查insecure是否輸錯

接下來去上傳鏡像

tag標簽詳細用法, 轉載: https://www.cnblogs.com/pzk7788/p/10180919.html

docker start registry  # 首先需要開啟私服
docker tag jdk1.8 192.168.101.189:5000/jdk1.8 # 標記此鏡像為私有倉庫的鏡像
docker images     # 可以看到多了一個 192.168.101.189:5000/jdk1.8 鏡像, 但id其實是一樣的
docker push 192.168.101.189:5000/jdk1.8 # 上傳到私有倉庫

 最后再從私有倉庫下載鏡像,

docker pull 192.168.101.189:5000/jdk1.8  # 回車, 發現提示如下

 

 意思是說, 已經存在該鏡像了, 所以我們可以先刪掉它,再下載試試,來驗證命令是否可用

docker rmi 192.168.101.189:5000/jdk1.8  # 先刪掉它
docker images # 確認不存在這個鏡像
docker pull 192.168.101.189:5000/jdk1.8 # 可以發現,下載成功了,說明下載指令沒有問題

 

 

------------- 完美的分割線 -----------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM