docker笔记(一)

配置centos7,ubuntu源:
https://www.cnblogs.com/renpingsheng/p/7845096.html ---centos7
https://github.com/apanly/mooc/tree/master/vagrant -----ubuntu
Docker的架构和底层技术:
docker platform :
1.Docker 提供了一个开发、打包、运行app的平台
2.把app和底层infrastructure隔离开来
Docker Image:
什么是image:
1.文件和meta data的集合(root filesystem)
2.分层的,并且每一层都可以添加改变删除文件,成为一个image
3.不同的image可以共享相同的layer
4.image本身是read-only的
Image的获取:
1.build from dockerfile
2.pull from registry
BaseImage的制作:
# 创建一个hellodocker镜像:
>> vi hello.c
>> sudo yum install gcc
>> sudo yum install glibc-static
# 编译hello.c
>> gcc -static hello.c -o hello
>> vi Dockerfile
>>sudo docker build -t wgw/hello-world .
>> sudo docker image ls
>> docker history e7b0a986020f(Image id)
>>sudo docker run wgw/hello-world

什么是continater:
1.通过Image创建(copy)
2.在Image layer之上建立一个contianer layer(可读写)
3.类比面向对象: 类和实例
4.Image负责app的存储和分发,Continaer负责运行app

>> docker container ls #当前本地正在运行的容器
>> docker container ls -a # 列出所有的容器
>> more hello-world/Dockerfile #查看hellow-world/Dockerfile中的内容
>> docker run centos # 会创建并运行centos这个container
>> docker run -it centos # 进入一个交互式的标准输入输出中
>> docker container rm + (id) # 删除容器
>> docker ps -a # 相当于docker container ls -a
>> docker image ls # 列举出当期所有的image或者docker images
>> docker image rm +(id) # 删除image
>> docker rmi +(id) # 相当于docker image rm
>> docker continaer ls -aq # 列举出所有的container id
>> docker continaer ls -a | awk {'print$1'} # 相当于docker continaer ls -aq
>> docker rm $(docker container ls -aq) # 删除掉所有的list里面的container
>> docker container ls -f "status=exited" # 列出所有状态为exited的容器
>> docker container ls -f "status=exited" -q # 列出所有状态为exited的容器的id
>> docker rm $(docker container ls -f "status=exited" -q) # 删除状态为exited的容器
构建自己的docker镜像:
docker container commit =====可以简写为====> docker commit
docker container build =====可以简写为====> docker build
>> docker image ls
>> docker run -it centos
# yum install -y vim
# exit
>> docker container ls -a
>> docker commit + images_names + 自己起一个名字
>> docker image ls
>> docker history id


Dockerfile让我们的镜像生成过程透明化:
>> mkdir centos-vim
>> vim Dockerfile
~FROM centos # 在centos的基础上创建image
~RUN yum install -y vim # 安装vim
>> docker build -t wgw/centos-vim-new .
>> docker image ls
>> more Dockerfile

Dockerfile 语法:
FROM:
(最佳实践:尽量使用官方的base image)
FROM scratch # 制作base image
FROM centos # 使用base image
FROM ubuntu:14.04
LABEL:
(Metadata不可少,相当于代码中的注释)
LABEL maintainer="wgw@qq.com"
LABEL version="1.0"
LABEL description="This is description"
RUN:
(最佳实践:为了美观,复杂的RUN请用反斜线换行!
避免无用分层,合并多条命令成一行!)
RUN yum update && yum install -y vim \
python-dev # 反斜线换行
RUN apt-get update && apt-get install -y perl\
pwgen --no-install-recommends && rm -rf \
/var/lib/apt/lists/* # 注意清理cache
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
WORKDIR:(用来设置工作目录)
注: 用WORKDIR,不要用RUN cd! 尽量使用绝对目录!
WORKDIR /root


WORKDIR /test # 如果没有会自动创建test目录
WORKDIR demo
RUN pwd # 输出结果应该是 /test/demo
ADD and COPY:
都可以把本地的文件添加到image中
注: 大部分情况下,COPY要优于ADD!
ADD 除了COPY还有额外功能(解压)!
添加远程文件/目录请使用curl或者wget
ADD hello /

ADD test.tar.gz/ # 添加到根目录并解压

WORKDIR /root
ADD hello test/ # /root/test/hello

WORKDIR /root
COPY hello test/
ENV:
(最佳实践: 尽量使用,可以提高Dockerfile的可维护性)
ENV MYSQL_VERSION 5.6 # 设置常量
RUN apt-get install -y mysql-server="${MYSQL_VERSION}"\
&& rm -rf /var/lib/apt/lists/* # 引用常量 
VOLUME and EXPOSE:
主要用于存储和网络,后面补充
RUN vs CMD vs ENTRYPOINT:
RUN: 执行命令并创建行的Image layer
CMD:
设置容器启动后默认执行的命令和参数
如果docker run指定了其他命令, CMD命令将被忽略
如果定义了多个CMD, 只有最后一个会执行

ENTRYPOINT:
设置容器启动时运行的命令
让容器 以应用程序或者服务的形式运行
不会被忽略, 一定会执行
最佳实践: 写一个shell脚本作为entrypoint
eg:
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
shell格式:
RUN apt-get install -y vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
Exec格式:
RUN ["apt-get", "install","y", "vim"]
CMD ["/bin/echo","hello docker"]
ENTRYPOINT ["/bin/echo", "hello docker"]
shell 格式 和 exec格式:
Dockerfile1
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
Dockerfile2
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/bash","-c", "echo hello $name"]
镜像发布:
docker tag world phantom0925/hello_world001
docker push phantom0925/hello_world001
创建私有镜像发布平台:
>> docker run -d -p 5000:5000 --restart always --name registry registry:2
这样会创建一个服务器,端口为5000
另外,启动一台docker
>> sudo ls /etc/docker
>> vi /etc/docker/daemon.jsonn
~ {"insecure-registries":["10.75.44.222:5000"]}
>> vi /lib/systemd/system/docker.service
[Servic]
~ EnvironmentFile=-/etc/docker/daemon.json
>> sudo service docker restart
>> docker push 10.75.44.222:5000/hello-world

转载于:https://www.cnblogs.com/wgwblogs/p/11052143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值