Docker的安裝與配置使用

一、安裝docker

1、安裝依賴包

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

2、設置docker安裝源
有國外的和阿里雲兩個可以選(二選一), 因爲國外的比較慢,可以選國內的阿里雲鏡像源
國外鏡像源:

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

阿里雲鏡像源:

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

3、安裝社區版Docker-CE

yum install -y docker-ce

4、啓動docker
設置開機啓動:

systemctl enable docker

啓動docker

systemctl start docker

測試是否成功
docker有一個測試用的hello world鏡像

docker run hello-world

在這裏插入圖片描述
5、配置鏡像加速器
國內下載較慢,可以配置鏡像加速器,如果沒開通過這個服務需要創建一個鏡像,按照提示操作即可。
在這裏插入圖片描述
在這裏插入圖片描述
直接在虛擬機中運行阿里雲控制檯中提示的命令即可。

6、拉取鏡像
從daocloud上拉取鏡像https://hub.daocloud.io/
註冊賬號,登陸搜索鏡像
在這裏插入圖片描述
選擇版本後拉取:
在這裏插入圖片描述

二、docker鏡像

輸入docker 能看到提示的命令:
在這裏插入圖片描述

1、搜索鏡像

搜索幫助

docker search --help

在這裏插入圖片描述
查看docker鏡像

docker images

在這裏插入圖片描述
現在本機沒有鏡像,可以下載鏡像。可以進行搜索

docker search 關鍵字 --limit 條數

比如找nginx鏡像
在這裏插入圖片描述

3、安裝鏡像

拉取java鏡像,如果不寫版本號就默認下載最新版本

docker pull 鏡像版本

版本可以去官網查看https://hub.docker.com/
在這裏插入圖片描述
安裝鏡像
在這裏插入圖片描述
如果一個鏡像的名不能直接說明它的信息,可以通過命令修改tag:

docker tag IMAGEID 新鏡名稱:新標籤

在這裏插入圖片描述

3、刪除鏡像

刪除之前要保證鏡像沒有被任何容器使用,如果有容器需要先刪除容器

docker rmi 鏡像名:版本
docker rmi nginx:latest

在這裏插入圖片描述

4、備份鏡像

再安裝一個nginx鏡像

docker pull nginx

在這裏插入圖片描述
備份本地鏡像倉庫

docker save -o nginx.img.tar nginx

在這裏插入圖片描述

5、導入鏡像
docker load -i nginx.img.tar

在這裏插入圖片描述

三、docker容器

1、啓動容器
docker run 參數 鏡像名稱:tag 

運行一個容器時,若只是指定了鏡像名,而沒有指定其tag,docker默認會以tag爲latest(最新版本)的鏡像去啓動容器,假如本地不存在這個鏡像則先會報錯;之後會嘗試下載這個鏡像,下載成功後再次運行容器和所要執行的命令。
在這裏插入圖片描述
後臺啓動容器

docker run -itd 鏡像:版本

或者

docker run -itd 鏡像id 

-itd運行一個在後臺執行的容器,同時,還能用控制檯管理

2、停止容器
docker stop 容器id

在這裏插入圖片描述
docker ps -a:可以列出所有容器,包括未運行的容器
docker rm 容器id:刪除容器
docker start 容器id:啓動一個容器
docker restart 容器id :重新啓動一個容器

3、端口映射

映射端口,docker的網絡和宿主機網絡不在一個網段,不能直接訪問,需要進行端口映射

docker run -itd -p 宿主機端口:docker端口 鏡像id 

如:新建容器啓動nginx

docker run -itd -p 80:80 2622e6cca7eb

在這裏插入圖片描述
停止nginx服務

docker stop 1da4608e1cc9

在這裏插入圖片描述

4、容器命名

docker容器在啓動的時候有個名字隨機的名字,名字是唯一的,用於區分容器.通過容器的name也可以操作容器,作用和容器id是一樣的。可以自己指定容器的名字:

docker run -itd --name 新名字

如端口映射啓動nginx並指定容器名稱

docker run -itd --name nginx1 -p 80:80 2622e6cca7eb

在這裏插入圖片描述
通過容器名停止容器

docker stop nginx1

重命名容器

docker rename 原名字 新名字
5、其它命令

查看本地所有容器(包括未運行的):

 docker ps -a

查看最近一次啓動的容器(不論現在是啓動還是停止):

docker ps -l

查看正在運行的容器id

docker ps -q

查看所有容器id

docker ps -aq

查看容器的元數據信息,有啓動時執行的命令或程序、運行時的IP、所使
用的鏡像等:

docker inspect <容器ID|容器名>

查看容器ip:

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id

刪除容器

docker rm 容器id

在宿主機直接運行容器中的命令

docker exec 容器名/容器 ID(不是鏡像名/鏡像ID) 執行的命令 [參數]

如:

docker exec amazing_elion cat /etc/redhat-release

查看日誌

docker logs 容器id|容器名

可以通過使用docker logs命令來查看容器的運行日誌
--tail:選項可以指定查看最後幾條日誌
-t:選項則可以對日誌條目附加時間戳。
--until:顯示在某個時間戳(例如:2018-05-25T 13:23:37)之前的日 志,還可以相對時間(例如:42m 42 minutes )

在宿主機和容器之間傳遞文件:

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH

將容器中的centos7.4:/root/a.txt 複製到宿主機當前路徑.(最後那個.是宿主機當前路徑)

docker cp centos7.4:/root/a.txt .

把宿主機當前路徑下的a.txt傳回容器:

docker cp ./a.txt centos7.4:/root/a.txt

在宿主機查看容器的變化:

docker diw 容器id
[root@localhost ~]# docker diff 78d A /change_dir A /change_dir/file.txt C /root A /root/.bash_history A /test 

A 表示在原來的基礎上,做了添加
C 表示在原來的基礎上,做了改變

四、數據卷

如果刪除容器,那麼容器中的東西就都刪除了。我們可以把文件存在宿主機,這樣刪掉容器之後,文件還在宿主機上。數據卷可以在多個容器之間共享。並且直接在容器中修改文件,如果文件錯誤,會造成容器無法啓動,宿主機不能進入未啓動的容器,也就不能再修正錯誤的文件了,這個容器就廢掉了。如果文件掛載到外部,可以直接在宿主機修改。

以mysql鏡像爲例

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.24

-v 宿主機目錄:鏡像目錄 是把鏡像中對應的文件掛載宿主機目錄中
-e 容器啓動時的參數
-d 鏡像,如果本地沒有,則會自動拉取鏡像
在這裏插入圖片描述
docker stop mysql 停止容器,此時不能再連接到數據庫了
在這裏插入圖片描述
在這裏插入圖片描述
docker rm mysql 刪除容器
再用上面相同的方式開啓一個容器,再次連接數據庫,可以看到數據都在。
 

五、自定義鏡像

容器是一個靜態環境,鏡像中它是什麼樣子,運行起來就是什麼樣,是不能改變的。如果想在容器中運行寫好的項目,需要把項目打包發佈出去。
這時需要自定義鏡像。
自定義鏡像,使用Dockerfile,注意沒有後綴名
例如有一個打好的包,boot.jar,上傳到宿主機的/usr/local/docker下放的是一個springboot的jar包,運行的時候會返回文字(代碼不重要,寫什麼都可以)

package com.boot.test;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @RequestMapping("index")
    public String index(){
        return "hello Docker";
    }
}

如果在服務器直接運行 是java -jar boot.jar
如果想在容器中運行,需要創建Dockerfile

vim Dockerfile

內容

FROM java
COPY boot.jar /
CMD java -jar /boot.jar
FROM 鏡像名
COPY 宿主機文件 鏡像位置
CMD 在鏡像中需要執行的命令

使用java鏡像
複製boot.jar到docker的根目錄下
執行cmd運行jar包

注意複製的文件和Dockerfile在一個目錄下面,不能寫宿主機絕對路徑,否則會報錯

構建鏡像 -t代表target,testdocker是自定義的鏡像名,最後的.代表當前路徑

docker build -t testdocker .

在這裏插入圖片描述
啓動鏡像

docker run -itd -p 8080:8080 d1d5bed4d8ea

在這裏插入圖片描述
訪問對應的端口和請求路徑就能看到結果
在這裏插入圖片描述
查看日誌
docker logs 容器id
可以查看啓動過程,和本機運行的控制檯是一樣的
在這裏插入圖片描述

六、發佈鏡像

先登錄docker hub,如果沒賬號的話,可以先註冊一個
在這裏插入圖片描述
創建自己的鏡像
在這裏插入圖片描述
創建完之後會有個路徑,一般是 用戶名/倉庫名

docker push 路徑

需要注意的是本地的倉庫需要帶着路徑,如果本地鏡像叫aa,你的用戶名叫user,那麼路徑就是user/aa
本地原來叫aa,需要重命名成user/aa,否則會報錯
在這裏插入圖片描述
重命名:

docker tag 鏡像id 用戶名/鏡像名:版本

把Dockerfile 推送到docker hub
在這裏插入圖片描述

七、docker compose

docker compose負責快速部署分佈式
安裝命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

最後一步如果下載不下來,就換一個地址:

git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev=0 --tags

卸載

sudo rm /usr/local/bin/docker-compose

常用命令
前臺運行:docker-compose up
後臺運行:docker-compose up -d
啓動:docker-compose start
停止:docker-compose stop
停止並移除容器:docker-compose down

默認的模板文件名稱爲:docker-compose.yml ,格式爲 YAML 格式。、

version: "3"
services:
 webapp:
  image: examples/web
   ports:
   - "80:80"
	volumes:
	- "/data"

version 是語言版本
service 是服務
webapp是服務名,名字可以自定義
image 是使用的鏡像
ports 是端口映射
volumes 是數據卷

安裝tomcat

例如,使用docker-compose安裝tomcat
創建docker-compose.yml文件

version: '3.1'
services:
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5-jre8-slim
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
    environment:
      TZ: Asia/Shanghai

保存之後運行命令,如果本地沒有鏡像會下載

docker-compose up -d

在這裏插入圖片描述
在這裏插入圖片描述
訪問宿主機的8080端口可以看到tomcat界面
在這裏插入圖片描述

安裝mysql

安裝mysql5.7.24

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7.24
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

在這裏插入圖片描述
安裝mysql8

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

如果想同時安裝mysql和tomcat,可以寫到一個docker-compose.yml中

version: '4.1'
services:
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5-jre8-slim
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
    environment:
      TZ: Asia/Shanghai
  mysql:
    restart: always
    image: mysql:5.7.24
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql

 

八、使用docker安裝gitlab

使用Docker來安裝和運行Gitlab中文版,由於新版本問題較多,這裏使用目前相對穩定的10.5版本,docker-compose .yml配如下:

version: '3'
services: 
  web:
    image: 'twang2218/gitlab-ce-zh:10.5'
    restart: always
    hostname: '121.196.62.166'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url  'http://121.196.62.166:8080'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        unicorn['port'] = 8888
        nginx['listen_port'] = 8080
    ports: 
      - '8080:8080'
      - '8443:443'
      - '2222:22'
    volumes:
      - /usr/local/docker/gitlab/config:/etc/gitlab
      - /usr/local/docker/gitlab/data:/var/opt/gitlab
      - /usr/local/docker/gitlab/logs:/var/log/gitlab

這裏雲服務器是2g內存帶不動,gitlab耗內存,3g內存可以打開
在這裏插入圖片描述

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