Docker的中央仓库

1.Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢。
https://hub.docker.com/
2.国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。
https://c.163yun.com/hub#/home 
http://hub.daocloud.io/ (推荐使用)
3.在公司内部会采用私服的方式拉取镜像(添加配置)
vim /etc/docker/daemon.json

{
	"registry-mirrors":["http://hub.daocloud.io"],
	"insecure-registries":["ip:port"]
}
#重启两个服务
systemctl daemon-reload
systemctl restart docker
docker run \
-itd \
-v /root:/dockerStorage \ # 磁盘映射 本机磁盘—>docker磁盘
-p 192.168.1.1:8080:80 \ # 端口映射 本地192.168.1.1:8080端口—>docker 80端口
--expose 22 \ # 暴露端口
--expose 3306 \
--expose 1521 \
alpine:lastest \
/bin/bash

重启&启动&停止&删除容器

# 容器的启动,停止,删除等操作,后续会经常使用到
# 重新启动容器
docker restart 容器id
# 启动停止运行的容器
docker start 容器id
 
#停止指定的容器(删除容器前,需要先停止容器)
docker stop 容器id
#停止全部容器
docker stop $(docker ps -qa)
#删除指定容器
docker rm 容器id
#删除全部容器
docker rm $(docker ps -qa)

1.数据卷

#创建数据卷后,默认会存放在一个目录下/var/lib/docker/volumes/数据卷名称/_data
docker volume create 数据卷名称
docker volume ls

#查看数据卷的详细信息,可以查询到存放的路径,创建时间等等
docker volume inspect 数据卷名称

docker volume rm 数据卷名称

5.容器映射数据卷

#通过数据卷名称映射,如果数据卷不存在。Docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中。
docker run -d -p 8080:8080 --name tomcat -v 数据卷名称:容器内部的路径 镜像id
docker run -itd --name yxn -v vol:/data alpine

#通过路径映射数据卷,直接指定一个路径作为数据卷的存放位置。但是这个路径下是空的。
docker run -d -p 8080:8080 --name tomcat -v 路径(/root/自己创建的文件夹):容器内部的路径 镜像id
eg:
docker run -itd --name docker01 -v /etc/yum.repos.d/:/etc/yum.repos.d/ alpine
# 把docker 把

dockerFile

# 创建自定义镜像就需要创建一个Dockerfiler,如下为Dockerfile的语言

from:指定当前自定义镜像依赖的环境
copy:将相对路径下的内容复制到自定义镜像中
workdir:声明镜像的默认工作目录
run:执行的命令,可以编写多个
cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
 
#示例:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
eg:
FROM alpine:latest
WORKDIR /root
COPY /root/*.sh /root
run sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
run apk add vim openssh
run apk add screen
run apk add apk
cmd touch aa bb cc
FROM alpine:latest
WORKDIR /root
add /root/nbp-server.sh /root
run sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
run apk add vim
run apk add openssh
run apk add screen
cmd touch aa bb cc
FROM alpine:latest
MAINTAINER yxn
WORKDIR /root
add /root/Dockerfile
add /root/aa /root
run alias "vi=vim"
run alias "ll=ls -la"
run sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
run apk add vim
run apk add openssh openssl
run apk add screen
cmd touch aa
cmd touch bb cc dd
EXPOSE 80 22
expose 8888
expose 8081 9000
expose 8889 8840 8832 3306 3389 139
VOLUME /root
VOLUME ["/var/www","/etc/yum.repos.d","/tmp"]

2.通过Dockerfile制作镜像

#编写完Dockerfile后需要通过命令将其制作为镜像,并且要在Dockerfile的当前目录下,之后即可在镜像中查看到指定的镜像信息,注意最后的 .
docker build -t 镜像名称[:tag] ./
docker/build.sh


#!/bin/bash
#
#				Deny
#
# 	$1 版本号:5.10.3  $2 构建版本: debug, build, test 
#
#

version=$1

if [[ -z $version ]];then
  echo -e "\033[31m--------没有定义版本号!--------\033[0m"
  exit 1
fi

ver=$2

if [[ $2 == "debug" ]];then
  ver="debug"
elif [[ $2 == "test" ]];then
  ver="test"
else
  ver="build"
fi

basepath=`pwd`

dirname="ndr$version"

tmpdir="/tmp/$dirname"

export_path="$basepath/export"


[[ -d $export_path ]] || mkdir -p $export_path

filename="ndr$version.tar"


function clean(){
    echo -e "\033[36m--------清理临时文件--------\033[0m"
    rm -rf $tmpdir
}

function is_fail(){
    if [[ $1 -ne 0 ]];then
        echo -e "\033[31m--------打包过程出错--------\033[0m"
        clean
        echo -e "\033[31m----------打包失败----------\033[0m"
        [[ $1 -eq 1 ]] && exit 1;
    fi
}

echo -e "\033[35m版本号:\033[0m\033[34m$version\033[0m  \033[35m构建版本:\033[0m\033[34m$ver\033[0m"

echo -e "\033[36m--------开始打包流程--------\033[0m"
[[ -d $tmpdir ]] && rm -rf $tmpdir

mkdir -p $tmpdir

echo -e "\033[36m--------复制脚本文件--------\033[0m"
cp $basepath/deploy/* $tmpdir
is_fail $?

echo -e "\033[36m--------正在构建底包--------\033[0m"
cd $basepath/ndr && docker build -t ndr:1.0.0 .
is_fail $?

echo -e "\033[36m--------正在构建镜像--------\033[0m"
cd $basepath/ndr/$ver && docker build -t ndr:v$version .
is_fail $?

echo -e "\033[36m--------正在导出镜像--------\033[0m"
docker save -o $tmpdir/$filename ndr:v$version
is_fail $?

echo -e "\033[36m--------正在打包镜像--------\033[0m"
cd /tmp && tar zcf ${filename}.gz $dirname && mv ${filename}.gz $export_path
is_fail $?

clean

echo -e "\033[32m打包完成,文件位置:\033[0m \033[33m$export_path/${filename}.gz\033[0m"