【One by one系列】一步步学习docker(二)——再窥docker使用
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
2.2 查看已有镜像:docker image ls
docker image ls
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/
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
来吧,你可以在容器,为所欲为之为所欲为。
2.9 退出容器:exit
exit
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.容器生命周期图
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
参考资料
- https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html 你必须知道的Dockerfile
- https://yq.aliyun.com/articles/110806 Docker CE 镜像源站
- https://blog.csdn.net/TMDUODUO/article/details/101094677 将docker下载镜像改为阿里云下载镜像
- https://www.cnblogs.com/cac2020/p/11359412.html 【Docker学习之二】Docker部署安装
- https://yq.aliyun.com/articles/63035 大白话Docker入门(一)
- https://yq.aliyun.com/articles/63517 大白话Docker入门(二)
- 原文作者:Garfield
- 原文链接:http://www.randyfield.cn/post/2020-03-26-docker2/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。