docker的镜像与容器

dk 的架构和底层技术

docker platform

docker engine

docker architecture

client

docker build
docker pull
docker run

docker_host

docker daemon
containers
images

registry

底层技术支持

实验环境介绍

docker image

什么是image

sudo docker image ls

image的获取

去掉docker的sudo

sudo docker version
sudo groupadd docker
sudo gpasswd -a vagrant docker
sudo service docker restart
exit
vagrant ssh
docker version

写一个简单的base image

docker image ls
docker pull hello-world
sudo yum install vim gcc git glibc locate glibc-static
vim hello.c

#include<stdio.h>

int main()
{
    printf("hello docker\n");
}

gcc -static hello.c -o hello

vim Dockerfile

FROM scratch
ADD hello /
CMD ["/hello"]

docker build -t nirolee/hello-world

什么是container

docker container ls
docker container ls -a(退出的也能看到)
more hello-world/Dockerfile
docker run ubuntu

交互式运行

docker run -it ubuntu

docker 的命令

docker management commends

commands

docker container ls -a | awk {'print$1'} 缩写 docker container ls -aq
全部清理
docker rm $(docker container ls -aq)
清理退出的container
docker rm $(docker container ls -f "status=exited" -q)

构建docker镜像

第1种方法

create a new image from a container’s changes
docker container commit

例如
docker images
docker run -it centos
yum install -y vim
exit
docker container ls -a

docker commit [options] container [repository[:tag]] [flags]
docker commit elegant_mestorf nirolee/centos-vim

但是不提倡用这种方法创建镜像,不安全

第2种方法

build an image from a dockerfile
docker image build

例如
mkdir docker-centos-vim
cd docker-centos-vim
vim Dockerfile

FROM centos
RUN yum install -y vim

docker build -t nirolee/centos-vim-new .

Dockerfile 语法
– FROM
+ FROM scratch # 制作base image 从头制作的意思
+ FROM centos # 使用base image
+ FROM ubuntu:14.04
尽量用官方的image
– LABEL
+ LABEL maintainer = “nirolee@foxmail.com”
+ LABEL version=”1.0″
+ LABEL description=”this is description”
metadata不可少
– RUN
+ RUN yum update && yum install -y vim
\python-dev
+ apt-get update && apt-get install -y perl \
pwgen –no-install-recommends && rm -rf \
/var/lib/apt/lists/* #注意清理cache
+ /bin/bash -c ‘source’ $HOME/.bashrc; echo $HOME’

执行命令并创建新的image layer

复杂run用反斜线换行,避免无用分层,合并多条命令成一行
– WORKDIR
+ WORKDIR /root
+ WORKDIR /test # 如果没有会自动创建test目录
+ WORKDIR demo
+ RUN pwd #输出结果应该是 /test/demo
用WORKDIR,不要用RUN cd,尽量用绝对目录
– ADD and COPY
+ ADD hello /
+ ADD test.tar.gz / #添加到根目录并解压
+ WORKON /root
ADD hello test # /root/test/hello
+ WORKON /root
COPY hello test/
大部分情况,COPY优于ADD add除了COPY还有解压功能 添加远程文件/目录用curl或wget

设置容器启动时运行的命令

Shell 和 Exec格式
– Shell格式
RUN apt-get install -y vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"

镜像的发布
– docker hub
先在docker Hub上注册一个账号
docker login
docker push nirolee/hello-world:latest

拉取
docker pull nirolee/hello-world

run a local registry :quick version

docker run -d -p 5000:5000 --restart always --name registry registry:2
sudo ls /etc/docker
sudo more /etc/docker/daemon.json
{“insecure-registries”: [“192.168.0.1:5000”]}
sudo vim /lib/systemd/system/docker.service
docker push 192.168.0.1:5000/hello-world
查看是否push成功
GET /v2/_catalog

All posts

Other pages

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注