docker学习日志

安装

  • 二选一(ubuntu)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

curl -sSL https://get.daocloud.io/docker | sh

// 卸载旧版本
 sudo apt-get remove docker docker-engine docker.io containerd runc

容器

  • 运行
docker run *
//example
docker run ubuntu:15.10 /bin/echo "Hello world"
  • 运行交互式容器
docker run -i -t ubuntu:15.10 /bin/bash
      -i 允许对容器(stdin)交互
      -t 新容器内指定一个伪终端
      -d 后台模式
  • 常用指令
docker ps

docker ps -a

docker restart * //未运行

docker restart * //已运行

docker stop * 

docker exec *
docker attach *

docker logs *
  • 启动容器
docker run -it ubuntu /bin/bash
  • 导出容器(快照)
docker export exampleid > ubuntu.tar
  • 导入容器
cat docker/ubuntu.tar | docker import - test/ubuntu:v1

//也可以根据目录或URL
decker import http···/imagerepo
  • 删除容器
decker rm -f exampleid
  • 运行一个 web应用
docker pull training/webapp  # 载入镜像

docker run -d -P training/webapp python app.py
      -d:让容器在后台运行。
      -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
docker port exampleid
//查看端口

docker logs exampleid
//查看日志

docker top exampleid
//查看容器内运行的内存

docker inspect exampleid #查看底层信息

docker rm exampleid #删除不需要的容器(必须是停止状态)

镜像使用

  • 列出所有镜像
docker images
  • 使用镜像
decker search httpd #查找镜像

//获取新镜像
docker pull ubuntu:14.04

docker run -t -i ubuntu:14.04 /bin/bash
  • 拖取镜像
docker pull httpd

//运行
docker run httpd
  • 删除镜像
docker rmi imageid
  • 更新镜像
//先创建新容器
docker run -t -i ubuntu:15.10 /bin/bash
exit

//提交副本
docker commit -m="has update" -a="runoob" 容器id runoob/ubuntu:v2
      -m: 提交的描述信息
      -a: 指定镜像作者
      runoob/ubuntu:v2: 指定要创建的目标镜像名

docker run -t -i runoob/ubuntu:v2 /bin/bash

构造镜像

cat Dockerfile


docker build -t runoob/centos:6.7 
      --privileged = true # 可调试c++


容器连接

网络端口映射

docker port id # 查看端口绑定情况

docker run -d -P training/webapp python app.py
     

-P 随机映射端口
-p 容器内部端口绑定到指定端口

docker run -d -p 5000:5000 training/webapp python app.py

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

容器互联

docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

  • 容器命名
docker run -d -P --name runoob training/webapp python app.py
      --name 名字
  • 新建网络
docker network create -d bridge test-net
      -d 指定网络类型
      test-net 网络名
  • 连接容器
    运行一个容器test1 并连接到新建的 test-net 网络:
docker run -itd --name test1 --network test-net ubuntu /bin/bash

运行一个容器test2 并连接到新建的 test-net 网络:

$ docker run -itd --name test2 --network test-net ubuntu /bin/bash

检查是否连接

apt-get update
apt install iputils-ping

ping test2
  • 配置DNS
    可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。

配置完,需要重启 docker 才能生效。

查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:

docker run -it --rm ubuntu cat etc/resolv.conf

手动配置

docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu

仓库管理

docker login

docker logout

docker search ubuntu

docker pull ubuntu

  • 推送
docker tag ubuntu:18.04 username/ubuntu:18.04

docker image ls

docker push username/ubuntu:18.04

docker search username/ubuntu

Dockflie

定义: 在当前路径创建镜像时运行

FROM nginx //定制镜像

RUN    # CMD在docker run时运行
    -shell格式  
        RUN 命令行
    -exec模式
    RUN ["可执行文件", "参数1", "参数2"]
    RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline    
  • Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大,应使用 && 连接
FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz
  • docker会根据当前路径的 Dockerfile 创建镜像
docker build -t nginx:v3 .
  • WORKDIR 工作路径
WORKDIR <工作目录路径>
  • COPY 复制文件到镜像 ADD 会解压但慢
COPY hom?.txt /mydir/
  • ENV 设置环境变量 //ARG只在build时有用
ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
  • VOLUME 数据卷,防止数据丢失
VOLUME <路径>
  • EXPOSE 端口
EXPOSE <端口1> [<端口2>...]
  • LABEL 宏定义
LABEL org.opencontainers.image.authors="runoob"
posted @ 2022-06-02 14:21  InsiApple  阅读(33)  评论(0编辑  收藏  举报