Docker從入門到實(shí)踐

  • 基本概念

  1. 鏡像
    Docker 鏡像就是一個(gè)只讀的模板,鏡像可以用來創(chuàng)建 Docker 容器
  2. 容器
    容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例换薄。 它可以被啟動(dòng)换可、 開始色建、 停止、 刪除宦棺。 每個(gè)容器都是相互隔離的、 保證安全的平臺
  3. 倉庫
    倉庫是集中存放鏡像文件的場所.
    倉庫注冊服務(wù)器上往往存放著多個(gè)倉庫黔帕, 每個(gè)倉庫中又包含了多個(gè)鏡像代咸,每個(gè)鏡像有不同的標(biāo)簽(tag)最大的公開倉庫是 Docker Hub, 存放了數(shù)量龐大的鏡像供用戶下載成黄。 國內(nèi)的公開倉庫包括 Docker Pool等呐芥, 可以提供大陸用戶更穩(wěn)定快速的訪問。
    push命令上傳到倉庫
    pull命令拉取一個(gè)鏡像
  • CENTOS 7 安裝Docker

#安裝Docker
sudo yum install docker
#啟動(dòng)Docker服務(wù)
sudo service docker start
#隨系統(tǒng)自動(dòng)加載
sudo chkconfig docker on

鏡像

1. 從倉庫獲取鏡像

命令
docker pull ubuntu:12.04
上面命令相當(dāng)于
docker pull registry.hub.docker.com/ubuntu:12.04
docker pull nginx

#創(chuàng)建一個(gè)容器,讓其運(yùn)行bash應(yīng)用
docker run -t -i ubuntu:12.04 /bin/bash
docker run -it nginx /bin/bash
#列出本地鏡像
docker images
image.png
2. 管理本地主機(jī)上的鏡像
  • 修改已有的鏡像
  1. 先啟動(dòng)容器得到容器ID

[root@www docker]# docker run -it nginx /bin/bash
root@5f42bff05683:/#

5f42bff05683即為容器ID

  1. 安裝其他的應(yīng)用
  2. 提交更新后的副本

[root@www docker]# docker commit -m "ADD TEST" -a "ZZJ" 5f42bff05683 myrepository/nginx:20180101
sha256:e365f0423f76ee746c7226f4e164fd6f98094e636d9928290694279eb55564cf
myrepository/nginx:20180101 為:
倉庫名:tag信息

image.png
  • 利用Dockerfile來創(chuàng)建鏡像
mkdir springboot_hello
touch Dockerfile

Dockerfile文件內(nèi)容

#This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
  • #表示注釋
  • FROM 表示基于哪個(gè)鏡像
  • MAINTAINER 是維護(hù)者的信息
  • RUN表示在創(chuàng)建中運(yùn)行
    編寫完Dockerfile后用docker build生成鏡像
    docker build -t="ouruser/sinatra:v2" .
  1. -t 標(biāo)記來添加tag
  2. "." 是Dockerfile所在的路徑,可以替換為其他
  3. ADD命令復(fù)制本地文件到鏡像
  4. EXPOSE命令向外部開放端口
  5. 用CMD命令描述容器啟動(dòng)后運(yùn)行的程序
  6. 用docker tag 命令修改鏡像的標(biāo)簽

如:

# put my local web site in myApp folder to /var/www
ADD myApp /var/www
# expose httpd port
EXPOSE 80
>\# the command to run
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

docker tag 5db5f8471261 ouruser/sinatra:devel

鏡像不能超過127層

  • 導(dǎo)入本地鏡像
    cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
  • 上傳鏡像
    docker push ouruser/sinatra
  • 存出鏡像(保存鏡像到本地文件)
    sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
  • 載入鏡像(將本地保存出來的鏡像導(dǎo)入到鏡像庫)
docker load --input ubuntu_14.04.tar
或者
docker load < ubuntu_14.04.tar
  • 移除本地鏡像
    docker rmi training/sinatra:[tag]
  • 移除容器
    docker rm ...
注: 移除鏡像之前要先移除該鏡像的所有容器
3. 鏡像的基本原理

Union FS

Docker容器

容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用奋岁, 以及它們的運(yùn)行態(tài)環(huán)境

  • 啟動(dòng)容器
  • 新建并啟動(dòng)容器

[root@www springboot_hello]# docker run -it docker.io/centos:latest /bin/echo "Hello World"

Docker run在后臺的標(biāo)準(zhǔn)操作有:

  • 檢查本地是否存在指定的鏡像思瘟, 不存在就從公有倉庫下載
  • 利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器
  • 分配一個(gè)文件系統(tǒng), 并在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去
  • 從地址池配置一個(gè) ip 地址給容器
  • 執(zhí)行用戶指定的應(yīng)用程序
  • 執(zhí)行完畢后容器被終止
  • 啟動(dòng)已終止的容器

docker start

  • 守護(hù)態(tài)運(yùn)行

docker run -d docker.io/centos:latest /bin/bash -c "while true ;do echo hello world done;"
docker ps 查看容器信息
docker logs 查看容器的輸出信息

  • 停止容器

docker stop

  • 當(dāng)Docker容器中指定的應(yīng)用終結(jié)時(shí)闻伶, 容器也自動(dòng)終止
    docker ps -a 可看到終止?fàn)顟B(tài)的容器
    docker restart 重啟一個(gè)容器

  • 進(jìn)入容器
  1. docker attach
    但是使用 attach 命令有時(shí)候并不方便滨攻。 當(dāng)多個(gè)窗口同時(shí) attach 到同一個(gè)容器的時(shí)候, 所有窗口都會同步顯示。 當(dāng)某個(gè)窗口因命令阻塞時(shí),其他窗口也無法執(zhí)行操作了光绕。
  2. nsenter
    安裝命令如下:

$ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar
$ ./configure --without-ncurses
$ make nsenter && sudo cp nsenter /usr/local/bin

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-
$ cd util-linux-2.24
$ ./configure --without-ncurses && make nsenter
$ sudo cp nsenter /usr/local/bin

獲取進(jìn)程的PID
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)

image.png

wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
https://github.com/yeasy/docker_practice

  • 導(dǎo)出容器快照

docker export 7691a814370e > ubuntu.tar

  • 導(dǎo)入容器快照

cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0
docker import http://example.com/exampleimage.tgz example/imagerepo
注:用戶既可以使用 docker load 來導(dǎo)入鏡像存儲文件到本地鏡像庫女嘲, 也可以使用 docker import 來導(dǎo)入一個(gè)容器快照到本地鏡像庫。 這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時(shí)的快照狀態(tài)) 浸锨, 而鏡像存儲文件將保存完整記錄序愚, 體積也要大拓提。 此外, 從容器快照文件導(dǎo)入時(shí)可以重新指定標(biāo)簽等元數(shù)據(jù)信息愕鼓。

  • 刪除容器

docker rm -f ...

docker rm -f $(docker ps -a -q)
docker images|grep none|awk '{print $3 }'|xargs docker rmi

Docker倉庫

倉庫(Repository) 是集中存放鏡像的地方
對于倉庫地址 dl.dockerpool.com/ubuntu 來說, dl.dockerpool.com 是注冊服務(wù)器地址慧起, ubuntu 是倉庫名

Docker Hub

  • 登錄
    可以通過執(zhí)行 docker login 命令來輸入用戶名菇晃、 密碼和郵箱來完成注冊和登錄。 注冊成功后完慧, 本地用戶目錄的 .dockercfg 中將保存用戶的認(rèn)證信息
  • 基本操作
    用戶無需登錄即可通過 docker search 命令來查找官方倉庫中的鏡像谋旦, 并利用 docker pull 命令來將它下載到本地
    docker search centos

私有倉庫

docker-registry 是官方提供的工具, 可以用于構(gòu)建私有的鏡像倉庫屈尼。

  • 安裝運(yùn)行 docker-registry

本地安裝

yum install -y python-devel libevent-devel python-pip gcc xz-devel
python-pip install docker-registry
No package python-pip available. 解決方法
sudo yum -y install epel-release
sudo yum -y install python-pip
sudo yum clean all

解決上面問題時(shí)又報(bào)錯(cuò)

Error: Package: python-pip-7.1.0-1.el6.noarch (epel)
Requires: python(abi) = 2.6
Installed: python-2.7.5-58.el7.x86_64 (@base)
python(abi) = 2.7
python(abi) = 2.7
Available: python34-3.4.5-4.el6.i686 (epel)
python(abi) = 3.4

所以安裝Python 2.6
CentOS 7 編譯安裝Python2.6.1
centos7 python多版本切換

  • 在私有倉庫上傳册着、 下載、 搜索鏡像
  • docker tag 標(biāo)記一個(gè)鏡像

格式為 :
docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
如: docker tag ba58 192.168.7.26:5000/test

  • 使用 docker push 上傳標(biāo)記的鏡像

docker push 192.168.7.26:5000/test

  • 用 curl 查看倉庫中的鏡像

curl http://192.168.7.26:5000/v1/search

  • 另外一臺機(jī)器去下載這個(gè)鏡像

docker pull 192.168.7.26:5000/test

  • 可以使用 這個(gè)腳本 批量上傳本地的鏡像到注冊服務(wù)器中脾歧, 默認(rèn)是本地注冊服務(wù)器 127.0.0.1:5000

wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod a+x push

#!/bin/sh

# This script will upload the given local images to a registry server ($registry is the default value).
# See: https://github.com/yeasy/docker_practice/blob/master/_local/push_images.sh
# Usage:  push_images image1 [image2...]
# Author: yeasy@github
# Create: 2014-09-23

#The registry server address where you want push the images into
registry=127.0.0.1:5000

### DO NOT MODIFY THE FOLLOWING PART, UNLESS YOU KNOW WHAT IT MEANS ###
echo_r () {
    [ $# -ne 1 ] && return 0
    echo -e "\033[31m$1\033[0m"
}
echo_g () {
    [ $# -ne 1 ] && return 0
    echo -e "\033[32m$1\033[0m"
}
echo_y () {
    [ $# -ne 1 ] && return 0
    echo -e "\033[33m$1\033[0m"
}
echo_b () {
    [ $# -ne 1 ] && return 0
    echo -e "\033[34m$1\033[0m"
}

usage() {
    sudo docker images
    echo "Usage: $0 registry1:tag1 [registry2:tag2...]"
}

[ $# -lt 1 ] && usage && exit

echo_b "The registry server is $registry"


for image in "$@"
do
    echo_b "Uploading $image..."
    sudo docker tag $image $registry/$image
    sudo docker push $registry/$image
    sudo docker rmi $registry/$image
    echo_g "Done"
done

摘自:https://github.com/yeasy/docker_practice/blob/docker-legacy/_local/push_images.sh

Docker 數(shù)據(jù)管理

  • 數(shù)據(jù)卷(Data volumes)

數(shù)據(jù)卷可以在容器之間共享和重用
對數(shù)據(jù)卷的修改會立馬生效
對數(shù)據(jù)卷的更新甲捏, 不會影響鏡像
卷會一直存在, 直到?jīng)]有容器使用

數(shù)據(jù)卷的使用鞭执, 類似于 Linux 下對目錄或文件進(jìn)行 mount

  • 創(chuàng)建一個(gè)數(shù)據(jù)卷

docker run -d -P --name web -v /webapp training/webapp python app.py

注意:也可以在 Dockerfile 中使用 VOLUME 來添加一個(gè)或者多個(gè)新的卷到由該鏡像創(chuàng)建的任意容器司顿。

  • 掛載一個(gè)主機(jī)目錄作為數(shù)據(jù)卷

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro
training/webapp python app.py

注意:Dockerfile 中不支持這種用法, 這是因?yàn)?Dockerfile 是為了移植和分享用的兄纺。 然而大溜, 不同操作系統(tǒng)
的路徑格式不一樣, 所以目前還不能支持估脆。

  • 掛載一個(gè)本地主機(jī)文件作為數(shù)據(jù)卷

docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
這樣就可以記錄在容器輸入過的命令了钦奋。

  • 數(shù)據(jù)卷容器(Data volume containers)

curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-uname -s-`u
$ sudo chmod a+x /usr/local/bin/docker-compose

Docker鏡像和倉庫

-查看docker鏡像 docker images

image.png

  • 搜索鏡像 docker search puppet
    image.png

倉庫Docker Registry

  • 利用鏡像直接搭建倉庫
docker run -p 5000:5000 registry:2 
[利用阿里云 OSS 搭建私有 Docker 倉庫](http://morning.work/page/2016-01/deploying-your-own-private-docker-registry.html)
  • 構(gòu)建鏡像
  • 方式1 commit方式
    `docker commit [容器ID] [目標(biāo)倉庫]/[鏡像名]:[tag] -m"描述" -a"作者"

  • 獲取容器ID docker ps -l -q

    image.png

  • 方法2 Dockerfile方式

[root@registry docker_srm_portal]# more Dockerfile 
# centos image
FROM centos
MAINTAINER xxx@xxx.com
#copy jdk and tomcat into image
ADD  ./tomcat8.tar.gz /opt/
ADD ./jdk1.8.tar.gz /opt/

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

#set environment variable
ENV JAVA_HOME /opt/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

RUN chmod -R +x /opt/tomcat8/bin

# copy web
COPY ./ROOT.war /opt/tomcat8/webapps/

VOLUME ["/opt/tomcat8/logs"]

EXPOSE 8080

#define entry point which will be run first when the container starts up
ENTRYPOINT /opt/tomcat8/bin/startup.sh && tail -f /opt/tomcat8/logs/catalina.out

exec命令方式執(zhí)行run

RUN ["apt-get"," install","-y","nginx"]
  • 刷新
ENV REFRESHED_AT 2018-01-01
RUN apt-get -qq update #刷新APT包的緩存
RUN yum -q makecache
  • 構(gòu)建
docker build --no-cache -t="[倉庫]/[鏡像名]:[tag]" .
docker build --no-cache -t="[倉庫]/[鏡像名]:[tag]" . -f file_path
  • docker history


    image.png
  • 查看端口
    docker ps -l
    docker port d96f3be34108

    image.png

  • 啟動(dòng)容器

docker run -d -p 127.0.0.1:80:80 --name web_demo [倉庫]/[鏡像名]:[TAG] nginx -g "daemon off"

CMD指令用于指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令。CMD可以在容器啟動(dòng)時(shí)被替換疙赠。當(dāng)Dockerfile存在兩個(gè)或多個(gè)CMD指令時(shí)最有最后一個(gè)CMD指令生效付材。
指定要運(yùn)行的特定命令:docker run –it centos /bin/sh
添加CMD指令:
CMD[“/bin/true”]
給CMD指令傳遞參數(shù):
CMD[“/bin/bash”,”-l”]
如有多個(gè)命令或多個(gè)進(jìn)程可以使用CMD /bin/bash –l && /bin/true 或考慮類型Supervisor這樣的服務(wù)管理工具。
CMD ["/bin/bash","-l"]
CMD ["/bin/bash"]

  • ENTRYPOINT命令

ENTRYPOINT指令與CMD指令非常類似圃阳,很容易和CMD指令弄混厌衔。CMD指令可以在docker run 命令行中覆蓋CMD指令,有時(shí)候捍岳,我們希望容器會按照我們想象的那樣去工作富寿,這時(shí)候CMD就不太適合了睬隶。而ENTRYPOINT指令提供的命令不容易在啟動(dòng)時(shí)被覆蓋。實(shí)際上作喘,docker run 命令行中指定的任何參數(shù)都會被當(dāng)作參數(shù)再次傳遞給ENTRYPOINT指令中指定的命令
添加ENTRYPOINT指令:
ENTRYPOINT[“/usr/sbin/nginx”]
給ENTRYPOINT傳遞參數(shù):
ENTRYPOINT[“/usr/sbin/nginx”,”-g”,”daemon off;”]
與CMD組合使用:
ENTRYPOINT[“/usr/sbin/nginx”]
CMD[“-h”]
注意:與CMD指令一樣理疙,ENTRYPOINT也是以數(shù)組的方式來運(yùn)行,也可以通過增加 /bin/sh –c 來直接運(yùn)行命令泞坦。
如果用戶確實(shí)需要窖贤,用戶也可以在運(yùn)行時(shí)通過docker run 的 –entrypoint 標(biāo)志來覆蓋 ENTRYPOINT指令。

ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off"]
CMD ["-h"]

可以用docker run 的--entrypoint 標(biāo)志覆蓋ENTRYPOINT命令
CMD和ENTRYPOINT 的主要區(qū)別是:ENTRYPOINT 提供的命令不容易在啟動(dòng)容器時(shí)被覆蓋

  • WORKDIR

切換工作目錄,ENTRYPOINTCMD在指定的工作目錄下執(zhí)行

WORKDIR /opt/
RUN bundle install
WORKDIR /webapp
ENTRYPOINT [ "rackup" ]

可以覆蓋:如docker run -it -w /var/log ubuntu pwd

  • ENV

設(shè)置環(huán)境變量

#一個(gè)ENV定義多個(gè)環(huán)境變量
ENV RVM_PATH=/home/rvm RVM_ARCHFLAGES="-arch i386"
ENV TARGET_DIR /opt/app
#可以引用已經(jīng)定義的環(huán)境變量
WORKDIR $TARGET_DIR 
#–e 標(biāo)志來傳遞環(huán)境變量
docker run –it –e“WEB_PORT=8080”ubuntu env

運(yùn)行時(shí)也可指定,只在運(yùn)行時(shí)有效,如:docker run -it -e "WEB_PORT=8080" ubuntu env

  • USER
#不指定默認(rèn)為root
USER nginx:group

docker run 中可以用 -u 指定

  • VOLUME

VOLUME指令用來向基于鏡像創(chuàng)建的容器添加卷贰锁。一個(gè)卷可以存在于一個(gè)或者多個(gè)容器的特定的目錄赃梧,這個(gè)目錄可以繞過聯(lián)合文件系統(tǒng),并提供如下共享數(shù)據(jù)或者對數(shù)據(jù)進(jìn)行持久化功能豌熄。

1. 卷可以在容器間共享和重用授嘀。
2. 一個(gè)容器可以不是必須和其他容器共享卷。
3. 對卷的修改時(shí)立即生效的锣险。
4. 對卷的修改不會對更新鏡像產(chǎn)生影響蹄皱。
5. 卷會一直存在直到?jīng)]有任何容器在使用它。
    添加VOLUME指令:
       VOLUME[“/opt/tomcat7/logs”]
   添加VOLUME指令指定多個(gè)卷
        VOLUME[“/opt/tomcat7/logs”,”/data”]
VOLUME ["/opt/project"]
#指定多個(gè)卷
VOLUME ["/opt/project","data"]

docker cp 和 VOLUME 類似

#鏡像里復(fù)制出來
docker cp cas_sso_1:/opt/tomcat7/webapps/cas.war .
#宿主復(fù)制到容器
docker cp 1.txt cas_sso_1:/opt/tomcat7/webapps
  • ADD

將構(gòu)建目錄下的文件和目錄復(fù)制到鏡像中

ADD software.lic /opt/app/software.lic
#以目的的/判斷源是目錄還是文件
ADD /opt/app /var/local/app/ #以/結(jié)尾為目錄
#使用URL格式
ADD http://www.baidu.com/test.txt /root/test.txt
#自動(dòng)解壓gzip,bzip2,gz的包
ADD test.tar.gz /var/www/app

注意
為了讓鏡像盡量小芯肤,最好不要使用ADD指令從遠(yuǎn)程 URL 獲取包巷折,而是使用curl和wget。這樣你可以在文件提取完之后刪掉不再需要的文件崖咨,可以避免在鏡像中額外添加一層锻拘。(譯者注:ADD指令不能和其他指令合并,所以前者ADD指令會單獨(dú)產(chǎn)生一層鏡像击蹲。而后者可以將獲取署拟、提取、安裝歌豺、刪除合并到同一條RUN指令中推穷,只有一層鏡像。)

  • COPY
#只復(fù)制Dockerfile同目錄的,不解壓和提取,容器里面是絕對路徑
COPY config/ /etc/app/
#拷貝目錄:
COPY conf.d/  /etc/apache2/ 
#拷貝文件
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
  • LABEL

添加元數(shù)據(jù),盡量所有的元數(shù)據(jù)都放到一條LABEL中,替代MAINTAINER

LABEL location="New York" type="Data Center"
LABEL multi.label1="value1" \
      multi.label2="value2" \
      other="value3"

查看元數(shù)據(jù)`docker inspect [倉庫名]/[鏡像名]

  • STOPSIGNAL

STOPSIGNAL 9
STOPSIGNAL SIGKILL

ARG指令用來定義可以在docker build 命令運(yùn)行時(shí)傳遞給構(gòu)建運(yùn)行時(shí)變量的指令类咧,在構(gòu)建時(shí)需要使用 –build-arg 標(biāo)志即可缨恒,用戶只能在構(gòu)建時(shí)指定在Dockerfile文件中定義過的參數(shù)。在Dockerfile定義這些參數(shù)后如未設(shè)置默認(rèn)值轮听,且在構(gòu)建時(shí)未傳入定義變量的值時(shí),構(gòu)建將失敗岭佳。

ARG build
ARG webapp_user=user
docker build --build-arg build=1234 -t [倉庫名]/[鏡像名] .
  • ONBUILD
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
  • 實(shí)例
[root@registry docker_srm_portal]# ll
total 245312
-rw-r--r-- 1 root root       193 Dec 26 01:45 docker-compose.yml
-rw-r--r-- 1 root root       565 Dec 26 01:49 Dockerfile
-rw-r--r-- 1 root root 185525916 Dec 19 10:32 jdk1.8.tar.gz
-rw-r--r-- 1 root root  57603854 Jan 15 10:56 ROOT.war
-rw-r--r-- 1 root root   8056699 Dec 27 18:48 tomcat8.tar.gz
[root@registry docker_srm_portal]# more Dockerfile 
# centos image
FROM centos
MAINTAINER xxx@xxx.com
#copy jdk and tomcat into image
ADD  ./tomcat8.tar.gz /opt/
ADD ./jdk1.8.tar.gz /opt/

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

#set environment variable
ENV JAVA_HOME /opt/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

RUN chmod -R +x /opt/tomcat8

# copy web
COPY ./ROOT.war /opt/tomcat8/webapps/

VOLUME ["/opt/tomcat8/logs"]

EXPOSE 8080

#define entry point which will be run first when the container starts up
ENTRYPOINT /opt/tomcat8/bin/startup.sh && tail -f /opt/tomcat8/logs/catalina.out
[root@registry docker_srm_portal]# more docker-compose.yml 
version: '2'
services:
  srm_portal:  
    image: 10.100.60.88:8080/srm_portal:1.0
    ports: 
      - "8080:8080"
    volumes: 
      - "./logs:/opt/tomcat8/logs"
      - "./upload:/usr/upload"
  • 查看

docker inspect 容器ID

  • 刪除鏡像

docker rmi [倉庫名]/[鏡像名]
docker rmi `docker images -a -q`

docker images [倉庫名]/[鏡像名]
#使用新的Registry為鏡像打標(biāo)簽
docker tag 鏡像ID  [主機(jī)名]:端口號/[倉庫名]/[鏡像名]
#推送到新的Registry
docker push [主機(jī)名]:端口號/[倉庫名]/[鏡像名]

資源鏈接

Docker 主站點(diǎn): https://www.docker.io
Docker 注冊中心API: http://docs.docker.com/reference/api/registry_api/
Docker Hub API: http://docs.docker.com/reference/api/docker-io_api/
Docker 遠(yuǎn)端應(yīng)用API: http://docs.docker.com/reference/api/docker_remote_api/
Dockerfile 參考:https://docs.docker.com/reference/builder/
Dockerfile 最佳實(shí)踐:https://docs.docker.com/articles/dockerfile_best-practices/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末血巍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子珊随,更是在濱河造成了極大的恐慌述寡,老刑警劉巖柿隙,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鲫凶,居然都是意外死亡禀崖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門螟炫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來波附,“玉大人,你說我怎么就攤上這事昼钻〉牛” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵然评,是天一觀的道長仅财。 經(jīng)常有香客問我,道長碗淌,這世上最難降的妖魔是什么盏求? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮亿眠,結(jié)果婚禮上碎罚,老公的妹妹穿的比我還像新娘。我一直安慰自己缕探,他們只是感情好魂莫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著爹耗,像睡著了一般耙考。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潭兽,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天倦始,我揣著相機(jī)與錄音,去河邊找鬼山卦。 笑死鞋邑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的账蓉。 我是一名探鬼主播枚碗,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铸本!你這毒婦竟也來了肮雨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤箱玷,失蹤者是張志新(化名)和其女友劉穎怨规,沒想到半個(gè)月后陌宿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡波丰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年壳坪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掰烟。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爽蝴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出媚赖,到底是詐尸還是另有隱情霜瘪,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布惧磺,位于F島的核電站颖对,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磨隘。R本人自食惡果不足惜缤底,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望番捂。 院中可真熱鬧个唧,春花似錦、人聲如沸设预。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳖枕。三九已至魄梯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宾符,已是汗流浹背酿秸。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魏烫,地道東北人辣苏。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像哄褒,于是被迫代替她去往敵國和親稀蟋。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一呐赡、Docker 簡介 Docke...
    極客圈閱讀 10,473評論 0 120
  • Docker — 云時(shí)代的程序分發(fā)方式 要說最近一年云計(jì)算業(yè)界有什么大事件糊治?Google Compute Engi...
    ahohoho閱讀 15,508評論 15 147
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應(yīng)用容器引擎罚舱,基于容器化井辜,沙箱機(jī)制的應(yīng)用部署技術(shù)」苊疲可...
    sessionboy閱讀 3,838評論 2 49
  • 你在我心最柔軟的地方留下印記粥脚,而你卻不知道。 我對你的感覺從未消失包个,甚至越來越強(qiáng)烈刷允。 當(dāng)我走過街道時(shí),看見那些...
    茶玉無雙閱讀 225評論 0 1
  • 地點(diǎn):浙江湖州太湖邊月亮酒店 器材:大疆精靈3 無人機(jī)航拍 參數(shù):光圈F2.8 快門3秒 ISO100 版權(quán): K...
    凱德印象閱讀 459評論 0 0