Build,Ship and Anywhere

书接上回,我们继续来实践docker

1.修改docker加速镜像为阿里云

由于众所周知的原因,使用docker pull,命令下载镜像太慢了,默认是从国外的。

https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.550.764e11be5adPKN

#阿里云镜像服务
https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.550.764e11be5adPKN

#密码
在阿里云容器镜像服务控制台-默认实例-访问凭证取 修改即可

#镜像加速器可以提升docker官方镜像的速度
在阿里云容器镜像服务控制台-镜像中心-镜像加速器

2.docker实战-万物皆镜像

以nginx官方镜像为例https://hub.docker.com/_/nginx

2.1 获取官方镜像:docker pull

docker pull nginx

image-20200531192659556

2.2 查看已有镜像:docker image ls

docker image ls

image-20200531192722874

2.3 查看镜像详情:docker image inspect

docker image inspect nginx

2.4 运行容器:docker run

一个镜像可以跑多个容器

docker run --name nginx-test -d -p 8082:80 nginx

nginx-test 容器名称,独一无二,不能重复

-d 后台运行

-p 指定端口,宿主端口:容器内部端口

-p 80 随机映射一个宿主机端口,通过docker port nginx-test

-p ip::containerport 容器端口映射主机指定ip动态端口

-p ip:hostport:containerport

-P 暴露所有(容器开发的所有)端口

nginx 镜像名称,nginx:tag ,其中nginx默认nginx:latest ,是简写,其他版本,就需要nginx:版本号

宿主机ip:192.168.1.105

http://192.168.1.105:8082/

image-20200531192738643

2.5 查看运行中的容器:docker container ps

docker container ps
docker  ps

2.6 查看所有的容器:docker container ps -a

docker container ps -a
docker  ps -a

2.7 查看容器详情:docker container inspect

docker container inspect nginx-test

2.8 进入容器:docker container exec

容器中必须运行有运行的程序,否则docker会把容器进程杀死,nginx是运行,如果只是一个linux系统的容器,会执行失败

docker container exec -it nginx-test /bin/bash

image-20200531192757829

来吧,你可以在容器,为所欲为之为所欲为。

2.9 退出容器:exit

exit

image-20200531192814300

2.10 删除容器

#停止容器
docker stop nginx-test

#删除容器
docker rm nginx-test

#强制删除容器
docker rm -f nginx-test

2.11 挂载容器文件

#Mounts节点
docker container inspect nginx-test  
#容器中无Mounts节点,mysql有,nginx没有

#自主挂载
#1.创建一个文件
mkdir -p /docker-mount/nginx/conf

#2.查看容器文件的路径
cd /etc/nginx/conf.d/
more default.conf
#没错!,文件路径/etc/nginx/conf.d/default.conf
#2.把docker的文件挂载到宿主机上
docker cp nginx-test:/etc/nginx/conf.d/default.conf  /docker-mount/nginx/conf

#3.宿主机查看文件
 more docker-mount/nginx/conf/default.conf
 
 #4.编辑文件
vim docker-mount/nginx/conf/default.conf
#5.挂载至容器
docker run --name nginx-test -d -p 8080:80 -v docker-mount/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf

2.12 容器日志

docker logs nginx-test

3.容器生命周期图

image-20200531192828189

4.Docker的四种网络模式

4.1 Bridge 桥接模式,docker默认

#配置容器的主机名
docker run --name t1 --network bridge -h [自定义主机名] -it --rm busybox

#自定义DNS
docker run --name t1 --network bridge --dns 114.114 -it --rm busybox

#给host文件添加一条
docker run --name t1 --network bridge --add-host [hostname]:[ip] -it --rm busybox

4.2 Host

与宿主机一模一样 不需要端口映射

4.3 None

不使用网络

4.4 Container

一个容器共享另外一个容器的network namespace,与host模式差不多,只是这里不是使用宿主机网络,而是使用的容器网络

配置docker0网络属性信息

vim /etc/docker/daemon.json

核心选项为bip,即bridge ip,用于指定docker0桥自身的ip地址;其他选项可以通过此地址计算出

5.生成镜像

方法一:更新

创建容器

docker run ..

修改容器

张益达说,你可以为所欲为。

commit

docker commit -a="作者" 容器名称 新镜像名称

方法二:dockerfile构建(这是重点)

dockerfile是什么?它又有哪些内容!?

  • 构建docker镜像的源码

  • 文本文档

  • docker build 自动执行命令行,自动构建docker镜像

  • 注释

  • 指令(不区分大小写),约定大写,参数小写

  • 顺序执行

  • start

    #FROM 基础镜像
    FROM image-name:tag
    LABEL author=carfield
    
    #ADD 可以从网络上下载
    ADD source-file dest-file
    ADD URL 容器目录
    
    #COPY 可以不用 与 ADD类似
    COPY 宿主机文件 容器文件
    #EXPOSE 暴露端口
    EXPOSE 80/tcp
    #ENTRYPOINT 容器内部生效
    ENTRYPOINT ["<executable>","<param1>","<param2>"] 
    
    #ENV 环境变量 key=value
    ENV PATH 
    
    #ARG 同ENV
    
    #RUN 指定docker build过程中运行命令
    RUN <command>
    
    #WORKDIR 工作目录 执行目录
    WORKDIR $
    
    #ONBUILD 触发器:被作为基础镜像触发
    ONBUILD 
    
    #CMD 容器启动生效
    CMD [""]
    
    • 构建镜像docker build -t image-name:tags ..当前目录
    #test
    FROM centos
    
    #镜像作者 元数据标签
    LABEL author=carfield
    
    #复制文件到镜像
    ADD ... ...
    ADD ... ...
    
    #配置环境变量
    ENV DOTNET 路径
    
    #WORKDIR
    WORKDIR ...
    
    RUN yum -y install vim
    
    VOLUME ["/data1"]
    
    EXPOSE 8080
    
    CMD ls
    
    ENTRYPOINT ....
    

6.发布镜像

6.1登录阿里云容器镜像服务

6.2推送至阿里云

# 登录docker仓库
sudo docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com
# 创建指定镜像的tag,归入某个仓库
sudo docker tag [镜像id] registry.cn-hangzhou.aliyuncs.com/xxxx/xxx:[镜像版本号]
# 镜像推送至仓库
sudo docker push registry.cn-hangzhou.aliyuncs.com/xxxx/xxx:[镜像版本号]

6.3拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/xxxx/xxx:v1

参考资料