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"
本文来自博客园,作者:InsiApple,转载请注明原文链接:https://www.cnblogs.com/InsiApple/p/16337626.html