安装
网络下载所需要的额外安装包
配置成本地的yum仓库
createrepo /var/www/html/docker
配置yum源
[docker]
name=docker
baseurl=http://172.25.33.250/docker
gpgcheck=0
安装docker查看依赖
yum install docker-ce bash-* -y
开启docker
systemctl start docker
systemctl enable docker
导入game2048游戏包,查看结果
加载该镜象,运行
docker load -i game2048.tar
docker run -d --name 2048 -p 80:80 game2048
查看运行状态
docker stats
由于使用80端口,网页直接尝试运行
加载ubuntu
docker load -i ubuntu.tar
以交互方式运行
docker run -it --name docker-ubuntu ubuntu
镜像创建
此时创建新的基础镜像
docker commit docker-ubuntu ubuntu:v1
运行新的基础镜像,此时发现先前所作的更改被保存
docker run -it --name vm ubuntu:v1
但是此时无法进行审计操作
docker history ubuntu:v1
此时尝试使用Dockerfile,进行构建
新建一个文件夹,创建Dockerfile
文件内容
FROM ubuntu
RUN echo "hello, world!"
使用build方法利用Dockerfile文件新建镜像
docker build -t ubuntu:v2 ./
审计,查看历史命令
镜像版本的查看
docker images
镜像版本的的修改
docker tag ubuntu:v2 ubuntu:latest
Docker文件的编写参数
FROM 指定基础镜像
MAINTAINER 指定镜像的作者等信息
COPY 拷贝Dockerfile同一目录下的文件
COPY src dest
CORY ["src","dest"]
ADD 拷贝并解档文件,也可以进行联网下载操作
ADD
ENV 设置环境变量,可以被后续指令使用
EXPOSE 暴露容器内服务的端口
VOLUME 申明数据卷,指定应用挂载点
VOLUME [“dir”]
WORKDIR 为RUN、CMD、ENTRYPOINT、ADD指令设置镜像中的当前工作目录,目录不存在则自动创建
RUN 容器中运行命令同时创建新的镜像层
CMD|ENTRYPOINT 设置容器启动后执行的命令,CMD会被docker run后面的命令行覆盖,但是ENTRYPOINT不会被忽略,一定会被执行,,docker run后面所接的参数可以传递给ENTRYPOINT,只能指定一个ENTRYPOINT,多个,只有最后一个有效
服务封装
使用Docker封装httpd服务
编写Dockerfile中所要用到的yum源
[root@server1 rhel]# cat dvd.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.33.250/octopus
gpgcheck=0
编写dockerfile文件
[root@server1 rhel]# cat Dockerfile
FROM rhel7
ENV HOSTNAME server1
MAINTAINER redhat@westos.org
EXPOSE 80
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all
VOLUME ["/var/www/html"]
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
创建镜像
docker build -t rhel7:v1 ./
运行
docker run -d --name httpd -v /webdata:/var/www/html -p 80:80 rhel7:v1
在发布目录创建主文件
查看结果
封装nginx服务(Docker多阶段构建镜像----有助于减小容器的大小)
拷贝nginx压缩文件至目录
编写yum源文件
[root@server1 nginx]# cat dvd.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.33.250/octopus
gpgcheck=0
编写Dockerfile
FROM rhel7 as build
COPY dvd.repo /etc/yum.repos.d/dvd.repo
ADD nginx-1.16.0.tar.gz /mnt
RUN rpmdb --rebuilddb && yum install gcc make zlib-devel zlib pcre pcre-devel -y && yum clean all
WORKDIR /mnt/nginx-1.16.0
RUN ./configure --prefix=/usr/local/nginx && make && make install
FROM rhel7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
封装镜像
docker build -t rhel:nginx ./
运行查看结果
docker run -d --name nginx-service -v /webdata/:/usr/local/nginx/html/ -p 80:80 rhel:nginx
容器镜像加速服务
设置阿里云容器镜像加速服务
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
进入阿里云,选择容器镜像服务
Docker私有仓库的构建
创建certs目录,并建立证书
mkdir certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /root/certs/octopus.com.key -x509 -days 365 -out /root/certs/octopus.com.crt
导入仓库镜像
docker load -i registry2.tar
使用该镜像搭建仓库
docker run -d \
--restart=always \
--name registry \
-v /root/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/octopus.com.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/octopus.com.key \
-p 443:443 \
registry:2
修改基础镜像的tag
添加本地解析
新建目录,并拷贝crt文件至该目录
mkdir /etc/docker/certs.d/octopus.com/
尝试推送
增加认证机制
创建目录/root/auth,增加用户和密码
mkdir auth
docker run --rm --entrypoint htpasswd registry:2 -Bbn octopus linux >auth/htpasswd
停止仓库的运行并删除,新建一个仓库
docker run -d --restart=always --name registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/octopus.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/octopus.com.key -p 443:443 -v /root/auth:/auth -e REGISTRY_AUTH=htpasswd -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2
尝试登陆,发现登陆成功,并且密码被保存在/root/.docker/config.json
docker login octopus.com
尝试推送
注意:其余主机需要使用时,需要创建相应配置文件目录/etc/docker/certs.d/octopus.com/,并导入证书
mkdir /etc/docker/certs.d/octopus.com/
cp /root/certs/octopus.com.crt /etc/docker/certs.d/octopus.com/ca.crt
添加webUI界面(docker-registry-web.tar)
加载镜像,查看认证信息
"auth": "b2N0b3B1czpsaW51eA=="
运行WebUI,使用8080端口
docker run -it -p 8080:8080 --name registry-web --link registry-2 \ # 连接仓库获取内容
-e REGISTRY_URL=https://172.25.33.1:443/v2 \ # 指定仓库链接
-e REGISTRY_TRUST_ANY_SSL=true \ # 使用SSL
-e REGISTRY_BASIC_AUTH="b2N0b3B1czpsaW51eA==" \ # 指定认证信息
-e REGISTRY_NAME=https://172.25.33.1:443 \ # 指定仓库名称
docker-registry-web
使用另一主机进行登录推送
登录网页进行查看