docker小結

docker小結

Docker是一個開源的容器引擎,它有助於更快地交付產品。php

Docker可將應用程序和基礎設施層隔離,而且將基礎設施看成程序同樣進行管理。使用Docker,能夠更快地打包,測試以及部署應用程序,並能夠縮短從編程到部署運行代碼的週期。java

安裝

  1. ubuntunode

    wget -qO- https://get.docker.com/ | sh

    當要以非root用戶能夠直接運行docker時,須要執行 sudo usermod -aG docker runoob 命令,而後從新登錄,不然會報錯linux

    或者安裝Docker社區版倉庫git

    sudo apt-get -y install \
       apt-transport-https \
       ca-certificates \
       curl
    
     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
     sudo add-apt-repository \
            "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
            $(lsb_release -cs) \
            stable"
    
     sudo apt-get update
    
     #在Ubuntu上安裝最新的Docker社區版
     sudo apt-get -y install docker-ce
    
     #測試你的Docker社區版是否安裝成功
     sudo docker run hello-world
  2. 啓動docker

    sudo service docker start
  3. 測試運行hello-worldnpm

    docker run hello-world
  4. 鏡像加速編程

    鑑於國內網絡問題,後續拉取 Docker 鏡像十分緩慢,咱們能夠須要配置加速器來解決,好比網易的鏡像地址json

    新版的 Docker 使用 /etc/docker/daemon.jsonLinux) 或者 %programdata%\docker\config\daemon.jsonWindows) 來配置 Daemonubuntu

    請在該配置文件中加入(沒有該文件的話,請先建一個):

    {
       "registry-mirrors": ["http://hub-mirror.c.163.com"]
     }

    或者註冊阿里雲帳戶

    訪問https://cr.console.aliyun.com... 能夠得到本身的加速器 https://××××××.mirror.aliyuncs.com

    針對Docker客戶端版本大於1.10.0的用戶,能夠經過修改daemon配置文件/etc/docker/daemon.json來使用加速器:

    sudo mkdir -p /etc/docker
     sudo tee /etc/docker/daemon.json <<-'EOF'
     {
       "registry-mirrors": ["https://6fzym3rt.mirror.aliyuncs.com"]
     }
     EOF
     sudo systemctl daemon-reload
     sudo systemctl restart docker
  5. 普通用戶加入docker組

    有時候,不想每次輸入sudo,這時,咱們能夠將用戶加入docker組。固然,這是不安全的,官方不推薦這樣作。

    # 建立docker組(若是沒有的話)
     sudo groupadd docker
    
     # 將當前用戶加入docker組
     sudo gpasswd -a ${USER} docker
    
     # 從新啓動docker服務
     sudo service docker restart或sudo systemctl restart docker
    
     # 當前用戶退出系統從新登錄
     su root
     su franson
    
     # 運行docker命令
     docker ps

容器

  1. 運行

    docker run alpine:latest /bin/echo "Hello world"
  2. 運行交互式的容器

    docker run -i -t -v /test:/soft ubuntu:15.10 /bin/bash

各個參數解析:

-t:在新容器內指定一個僞終端或終端。

-i:容許你對容器內的標準輸入 (STDIN) 進行交互。

-v:掛載容器,前者是宿主機中目錄,後者是容器內目錄,再加個`:`的話,是權限
  1. 啓動容器(後臺模式)

    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

    這時,容器在後臺運行,當前輸入容器不會打印hello world,只會返回一個ID號,經過它,能夠使用docker logs $ID來查看輸出內容。docker logs -f $ID可讓 dokcer logs 像使用 tail -f 同樣來輸出容器內部的標準輸出。

    指定-p標識來綁定指定端口。默認開放5000,映射到主機端口32769上。

    docker run -d -p 5000:5000 xx/1.0 node app.js

    已經中止的:docker start container_id

    正地運行的重啓:docker restart

    進入容器:docker exec -it container_id /bin/bash

    特權方式:docker run -it --privileged -v /test:/soft centos /bin/bash

  2. 查看容器

    docker ps # 正在運行的
    
    docker ps -a    # 全部的
    
    docker ps -l    # 最後一次建立的
    
    docker top determined_swanson # 查看進程
    
    docker inspect determined_swanson    # 底層信息
  3. 中止容器

    docker stop container_id
    docker stop $(docker ps -a -q)    # 中止全部容器
  4. 移除容器

    docker rm container_id
    docker rm $(docker ps -a -q) # 刪除全部未運行 Docker 容器

鏡像

  1. 查看鏡像

    # 查看全部鏡像
    docker images
    # 搜索服務器上可用的鏡像
    docker search httpd
  2. 建立鏡像

    # 下載
    docker pull httpd
    # 最小鏡像
    alpine

    當咱們從docker鏡像倉庫中下載的鏡像不能知足咱們的需求時,咱們能夠經過如下兩種方式對鏡像進行更改。

    • 從已經建立的容器中更新鏡像,而且提交這個鏡像,詳見更新
    • 使用 Dockerfile 指令來建立一個新的鏡像

      docker build -t xx:1.0 .

參數說明:

-t :指定要建立的目標鏡像名

. :`Dockerfile` 文件所在目錄,能夠指定`Dockerfile` 的絕對路徑
  1. 更新

    更新鏡像以前,咱們須要使用鏡像來建立一個容器。

    docker run -t -i ubuntu:15.10 /bin/bash

    在運行的容器內進行操做,輸入exit命令來退出這個容器。此時這個容器,是按咱們的需求更改的容器。咱們能夠經過命令 docker commit來提交容器副本。

    docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

    各個參數說明:

    -m:提交的描述信息

    -a:指定鏡像做者

    e218edb10161:容器ID

    runoob/ubuntu:v2:指定要建立的目標鏡像名

  2. 刪除

    # 刪除特定鏡像
    docker rmi id
    # 刪除全部未打tag的鏡像
    docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')
    # 刪除全部鏡像
    docker rmi $(docker images -q)
    # 刪除沒有使用的鏡像
    docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")
  3. 設置鏡像標籤

    docker tag 860c279d2fec runoob/centos:dev

Dockerfile樣例

# 用這個文件生成gitlab-ci須要的docker容器
# 同時須要有個jdk-8u161-linux-x64.tar.gz文件放在與它同級的目錄下
# 構建鏡像:docker build -t xx:1.0 .
# 建立容器:docker run -t -i xx:1.0  /bin/bash
FROM node:9

# 指定製做咱們的鏡像的聯繫人信息(鏡像建立者)
MAINTAINER jw

# 將根目錄下的文件都copy到container(運行此鏡像的容器)文件系統的app文件夾下
ADD . /app/
# cd到app文件夾下
WORKDIR /app

#apt-get update
RUN apt-get update && apt-get install sshpass

#生成ssh的key
RUN ssh-keygen -t rsa

#將jre包移動到 /usr/lib/jvm/目錄下並解壓
RUN mkdir /usr/lib/jvm \
        && mv /app/jdk-8u161-linux-x64.tar.gz /usr/lib/jvm \
        && cd /usr/lib/jvm \
        && tar -xzvf jdk-8u161-linux-x64.tar.gz

#設置路徑
RUN update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_161/jre/bin/java" 1 \
            && update-alternatives --set java /usr/lib/jvm/jdk1.8.0_161/jre/bin/java

# 安裝淘寶鏡像
RUN npm install cnpm -g --registry=https://registry.npm.taobao.org

# 配置環境變量
ENV JAVA_HOME /usr/lib/jvm/jre
ENV HOST 0.0.0.0
ENV PORT 8000

# 容器對外暴露的端口號
EXPOSE 8000

# 容器啓動時執行的命令,相似npm run start
#CMD ["npm", "start"]

ssh

使用sshpass來調用外部的命令:

sshpass -p 密碼 ssh 用戶名@IP -p 22 -o StrictHostKeyChecking=no 'ls /root'

遠程文件同步到當前目錄(.)下

scp -r 192.168.1.140:/opt/docker-volume/php/owncloud/apps/edu_video.tar.gz .

從主機複製到容器

docker cp host_path containerID:container_path

從容器複製到主機

docker cp containerID:container_path host_path

生成ssh

ssh-keygen -t rsa

scp -r /root/.ssh/id_rsa.pub 目標IP:/root/.ssh/authorized_keys
相關文章
相關標籤/搜索