Docker学习笔记

本文介绍Docker的安装步骤,容器的使用,镜像构建和使用。用于记录Docker中所使用到的命令,方便查阅。

Docker使用相关文章:
《OVS+Docker实现TCP/IP详解中的实验环境》
https://blog.youkuaiyun.com/walkerkalr/article/details/86999131

Docker安装

  • 安装方式1
  1. 添加Docker的APT仓库

sudo sh -c “echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list”

其中的trusty为主机的ubuntu版本,可以用个lsb_release命令来获取

root@localhost:/home/chenzb# sudo lsb_release --codename | cut -f2
trusty

  1. 添加Docker仓库的GPG秘钥

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80
–recv-keys 58118E89F3A912897C070ADBF76221572C52609D

  1. 安装Docker

sudo apt-get update
sudo apt-get install docker-engine

  1. 确认Docker已经安装成功

sudo docker info
该命令返回所有容器和镜像的数量,使用的驱动、存储和基本配置信息

  • 安装方式2
  1. 安装包,允许 apt 命令 HTTPS 访问 Docker 源。

$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

  1. 添加 Docker 官方的 GPG

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  1. 将 Docker 的源添加到 /etc/apt/sources.list

$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

  1. 安装 Docker

$ sudo apt-get update
$ sudo apt-get install docker-ce

Docker守护进程

Docker的操作都是针对守护进程执行,如下为守护进程的启动,查看和停止操作

sudo status docker NAME/CONTAINERID
sudo start docker NAME/CONTAINERID
sudo stop docker NAME/CONTAINERID

容器

运行容器:
docker run -i -t ubuntu /bin/bash
-i标志容器中的STDIN是开启的
-t标志Docker要为创建的容器分配一个伪tty终端
ubuntu 代表镜像
/bin/bash代表启动容器后启动一个Bash shell

docker ps查看正在运行的容器

docker ps -a查看所有容器

docker create创建一个容器,但不运行

docker attach 辐照一个运行中的容器

docker logs 获取容器的日志

docker logs -f 跟踪容器的日志

docker top 获取容器中的进程

docker stats 统计信息(CPU、内存、网络I/O、存储I/O)

docker exec -d ***NAME touch /etc/new_config_file 在运行的容器内部运行进程

docker exec -it NAME/CONTAINERID /bin/bash 进入容器环境打开终端

docker run --restart=always --name 自启动容器

–restart=on-failure:5 最多尝试重启5

docker inspect获取更多信息

docker rm 删除容器

docker rm 'docker ps -a -q' 删除所有容器

  • 绑定端口运行容器

docker run -d -p 8080:80 --name static_web2 chenzb/static_web nginx -g “daemon off;”

将容器的80端口绑定到8080

  • 登录容器的shell窗口

PID=$(sudo docker inspect --format ‘{{.State.Pid}}’ ddc285062762)

sudo nsenter --target $PID --mount --uts --ipc --net --pid

  • 其他Dockfile中的构建指令

CMD:指定一个容器启动时要运行的命令

ENTRYPOINT: docker run中的参数被传给ENTRYPOINT指令中指定的命令

WORKID 用来在容器内部设置一个目录,使后面的命令在这个目录下工作

ENV:用来在镜像构建中设置环境变量

USER:镜像以什么用户运行

VOLUME:用来向基于镜像创建的容器添加卷

ADD:用来将构建环境下的文件和目录复制到镜像中

COPY:和ADD类似,但不做文件的解压工作

LABEL:为镜像添加元数据

STOPSIGNAL:用来设置容器停止时发送设么系统调用信号给容器

ARG:docker build运行时传递给构建运行时的变量

ONBUILD:镜像触发器。当一个镜像被用在其他镜像的基础镜像时,该镜像中的触发器将会被执行

镜像

相关命令:
docker images 列出所有镜像

docker run -t -i --name new_container ubuntu:12.04 /bin/bash 运行带标签的镜像

docker pull fedora:20 拉取fedora:20镜像

docker search puppet 查找镜像

docker search ***查找镜像

docker commit提交镜像

docker history 镜像ID; 查看镜像构建的步骤

docker port 容器ID/容器名称 端口;查看容器中的端口对应的端口

docker rmi 删除镜像

docker rmi docker images -q 删除所有镜像

curl http://192.168.112.134:5000/v2/_catalog 查看已上传的images,其中192.168.112.134:5000为镜像的私有仓库地址

  • 上传镜像到本地仓库步骤
  1. 打tag

sudo docker tag f94a6764f693 192.168.112.134:5000/chenzb/static_web

  1. push

sudo docker push 192.168.112.134:5000/chenzb/static_web

  • 构建镜像
  1. 创建Dockerfile

MAINTAINER chenzb "1017448255@qq.com"

RUN apt-get update && apt-get install -y nginx

RUN echo ‘Hi, i am in your container’ /usr/share/nginx/html/index.html

EXPOSE 80

  1. 执行docker build命令
    执行结果:

root@localhost:/home/chenzb/static_web# docker build -t=“chenzb/static_web” .

Sending build context to Docker daemon 2.048kB

Step 1/5 : FROM ubuntu:14.04

14.04: Pulling from library/ubuntu

e53f134edff2: Pull complete

Digest:
sha256:17f216e8eb523740f5f93a297faf6a6dcb393e14fa911168b4e9df3c0b6ef28e

Status: Downloaded newer image for ubuntu:14.04

—> 5dbc3f318ea5 Step 2/5 : MAINTAINER chenzb "1017448255@qq.com"

—> Running in 67e482bb431a —> 0da25037ba56 Removing
intermediate container 67e482bb431a

Step 3/5 : RUN apt-get update && apt-get install -y nginx

—> Running in 06630c37f8ab Ign http://archive.ubuntu.com trusty
InRelease

Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]

Processing triggers for sgml-base (1.26+nmu4ubuntu1) … —>
aff49b75aa98 Removing intermediate container db17bcf024e8 Step 4/5 :
RUN echo ‘Hi, i am in your container’

/usr/share/nginx/html/index.html

—> Running in 5f35c5f689bd —> 3921a0895f30 Removing
intermediate container 5f35c5f689bd

Step 5/5 : EXPOSE 80

—> Running in 98adcc57391c —> c7bfb499845f Removing
intermediate container 98adcc57391c

Successfully built c7bfb499845f

Successfully tagged chenzb/static_web:latest

build命令通过-t制定新增镜像的仓库和名称,本例中仓库是chenzb,镜像是static_web。
.是告诉Docker到本地目录寻找Dockerfile文件。当执行Dockerfile失败时可以用前一个步骤返回的镜像ID来建立容器,继续运行下一步骤的命令进行调试。

  • 不使用缓存构建

docker build --no-cache -t="***" . 不使用Dockerfile的构建缓存

  • 基于构建缓存的Dockerfile模板

MAINTAINER chenzb "1017448255@qq.com"

ENV REFERSHED_AT 2019-01-29

RUN apt-get update && apt-get install -y nginx

RUN echo ‘Hi, i am in your container’ >/usr/share/nginx/html/index.html

EXPOSE 80

这里修改REFERSHED_AT可以是后面的指令都不缓存,又可以使之前的指令缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值