抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Docker学习

CentOS安装

可以用sudo yum -y install docker安装podman-docker

  • 检查内核是否支持安装
1
uname -a
  • 检查Device Mapper
1
2
3
4
ls -l /sys/class/misc/device-mapper
//若无
sudo yum install -y device-mapper
sudo modprobe dm_mod
  • 安装Docker
1
2
3
4
5
6
// sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
//安装EPEL源
sudo yum -y install epel-release
sudo yum update
// 安装docker
sudo yum -y install docker-io
  • 查看是否成功
1
2
sudo docker -v
//返回版本号则安装成功

容器

创建容器

1
2
3
4
5
6
7
8
9
docker --name *** run -i -t ubuntu /bin/bash
//创建一个运行bash 名字为***的容器
//ubuntu:12.04选择版本

docker run --restart=always --name ***
//--restart=always 自动检查是否重启
//--restart=on-failure:5 当容器的退出代码为非0值时重启,并且可选择最大重启次数为5

//-i -t创建tty,Stdin. -d则是在后台运行

查看容器

1
2
3
4
5
6
7
8
9
10
11
12
13
docker ps
//查看目前运行中的容器

docker ps -a
//查看所有的容器

docker inspect ***
//查看某个容器更深入♂的信息
docker inspect --format='{{ .State.Running }}' ***
//查看某项信息,返回的是容器的运行状态
//查询为{{ .NetworkSettings.IPAddress }}
//-f标志实际上支持完整的Go语言模板.这个可以mark下,因为我没学Go
//查询时可以在''中输入多个项目

重新打开已经关闭的容器

1
docker start ***

附着在容器上

1
2
3
4
5
6
7
docker attach ***

exit
//退出容器并把容器关闭

ctrl+p + ctrl+q
//退出容器但是不关闭

守护式容器

1
2
3
4
docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
//创建守护式容器

docker stop ***

容器的日志

1
2
3
4
docker logs -f ***
docker logs -ft ***
docker logs --tail 0 -ft ***
//-f则监控 -t则加上时间戳 --tail则读取最新的n行

容器的进程

1
2
3
4
5
6
7
8
docker top ***
//查看进程

docker exec -d *** touch /etc/create_new_config_file
//-d 说明运行一个后台进程

docker exec -t -i *** /bin/bash
//创建tty并且捕捉stdin 创建了新的bash会话

删除容器

1
2
3
4
docker rm ***
//删除某一个
docker rm `docker ps -a -q`
//通过docker ps -a -q输出全部docker ID一次删除所有容器

镜像

查看镜像

1
2
3
4
5
6
docker images
//docker的本地镜像都保存在Docker的宿主机的/var/lib/docker目录下
//docker的所有容器也储存在/var/lib/docker/containers中

docker images ****
//只看某种类型的

从Registry中拉取镜像

1
2
3
4
5
6
docker pull ***
//默认是从docker Hub中拉取

docker search ***
//用来查找Docker Hub上公共的可用镜像
//也可以在网站上找

仓库类型

1
2
3
4
5
6
//用户仓库 用户名+仓库名
a9ia/store

//顶层仓库 仅仓库名
ubuntu
fedora

从镜像中启动容器

1
2
3
docker run
//若镜像不在本地,则docker会先从docker hub下载镜像
//如果没有镜像标签(ubuntu:标签)则会默认为latest

登录Docker Hub

1
2
3
docker login
//需要在网站上注册
//个人认证信息会保存在$HOME/.docker文件夹中

镜像上传

1
2
3
4
5
6
7
8
docker commit *** **/**
docker commit -m="Some message" --author="Someone who did this commit"
//可用:设置一个标签
//将容器转化为镜像上传到某人某仓库
docker push id/repo

docker inspect **/**
//可用来查看新创建的镜像的详细信息

Dockerfile创建镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//首先创建dockerfile文件
//实例

//dockerfile文件
# Version: 0.0.1
FROM ubuntu:14.04
ENV DEBIAN_FRONTEND noninteractive
MAINTAINER A9ia Turnbull "a9ia@qq.com"
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container' >/usr/share/nginx/html/index.html
EXPOSE 80

//docker 创建镜像
docker build -t="owner/name:tag" .
docker build --no-cache -t="" .

//docker 镜像运行
docker run -d -p 20:80 --name try a9ia/try:v2 nginx -g "daemon off;"
//将容器80端口绑定在宿主机80上

docker port 查看镜像端口

Dockerfile指令

  • CMD 指定容器被启动时要运行的指令

    1
    docker run 指令会覆盖CMD指令
  • RUN 指定容器被创建时要运行的指令

  • ENTERPOINT 指令不会被覆盖

    1
    2
    CMD [ "bin/bash" ]
    ENTERPOINT ["usr/sbin/nginx", "-g", "daemon off;"]
  • WORKDIR 指定CMD, ENTERPOINT指令运行的目录

    1
    2
    3
    //在运行镜像时
    docker run -ti -w /var/log ubuntu pwd
    //通过-w覆盖工作目录
  • ENV RAM_PATH /home/rvm 指定环境变量

    1
    2
    //在其他指令中用环境变量
    WORKDIR $RAM_PATH
  • USER 指定运行时用户

    1
    USER user:group

评论