docker的几个术语
- 镜像image
- 容齐container
- docker client
- docker daemon : 接受客户端请求,实现功能并返回结果
- registry : 仓库
docker 常用命令
container操作
- run 创建一个新的容器并运行一个命令
- docker run -it 10.10.1.44:8580/library/centos:7 /bin/bash : 以交互式进入启动容器,并执行/bin/bash
- docker run -itd 10.10.1.44:8580/library/centos:7 : 以后台运行模式启动容器
- ps 查看容器列表
- docker ps -a 查看所有容器,包括已经挂掉的容器
- docker ps -aq 查看所有容器,只要第一列数据
- 停止容器 : docker stop 容器
- 重启容器 : docker restart 容器
- 删除容器 : docker rm 容器
- 进入一个后台运行的容器 :
- docker attach 3e
- docker exec -it 3e /bin/bash
- 推荐使用exec进入后台运行的容器,此中方式进入 exit退出终端不会导致容器的终止,而attach进入容器exit退出终端会导致容器结束
- 从容器创建一个新的镜像: docker。 commit -a ' zj.com' -m 'my hello world' 60945e446bf3(容器id):v1[版本号]
- a 指定作者; m 镜像描述信息;
- 从宿主机向容器内拷贝文件 :
- docker cp ./test 容器id:/tmp/ ; 将宿主机的test文件复制到容器的tmp文件下
- docker cp ./test 容器id:/tmp/text ;将宿主机的test文件复制到容器tmp文件夹下并重命名为text
- 查看容器日志 :
- docker logs 容器id
- docker logs --since '2019-11-11' --tail 7 3e9f9f501d5a ; 查看自从规定日期开始的7条日志
- 导入和导出容器
- docker export 容器id > my.tar ; 将容器到出为本地文件
- cat my.tar | docker import - hello:v1 ; 将本地文件导入为镜像
- 运行一个web应用
- 载入镜像 : docker pull training/webapp
- 运行镜像 : docker run -d -P training/webapp python app.py
- -d 后台运行
- -P 将容器内所有用到的端口映射到主机上
- 查看web应用容器 : docker ps ;
- 此时会看到这里多了端口信息 0.0.0.0:32769->5000/tcp
- docker 开放了5000端口,映射到主机32679上
- 使用-p参数设置不一样的端口
- docker run -d -p 5000:5000 training/webapp python app.py
- 快速查看网络端口映射
- docker port 容器id或者容器名字
- 查看web应用程序日志
- docker logs -f 容器id
- f参数: 同tail -f
- 查看容器内部的进程 : docker top 容器
- 检查web应用程序
- docker inspect 容器; 返回一个json格式,记录者docker容器的配置和状态信息
镜像操作
当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从镜像仓库中下载,默认是从docker hub公共镜像源下载
- 运行一个镜像:
- docker run -t -i centos:v1 /bin/bash
- -i 交互式操作
- -t 终端
- centos 镜像名, v1版本号
- /bin/bash 放在镜像名后边的是命令,这里我们想要有个交互式的shell,因此使用/bin/bash
- 获取一个新的镜像
- docker pull centos7
- 查找镜像
- 我们可以从docker hub网站搜索镜像, 网址为 https://hub.docker.com
- docker search 命令来搜索镜像
- 拖拽镜像
- docker pull ansible/centos7-ansible
- 删除镜像
- docker rmi hello-world
- 创建镜像
- 从已经创建的镜像中修改,并提交这个镜像
- 使用dockerfile指令来创建一个镜像
- 更新镜像
- 使用镜像来创建一个容器 docker run -it ansible/centos7-ansible
- 在容器中安装python3.6 yum install python36
- 完成后 exit退出容器
- 此时 ps -a 可以查看我们修改后的容器
- 通过 docker commit 提交副本 docker commit -m '描述信息' -a '镜像作者' 镜像id py36:v1(镜像名)
- 构建镜像
- docker build
- dockerfile详解
- docker通过读取dockefile中的指令自动生成镜像
- dockerfile基本结构
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时的指令
- # 为docker中的复制
- FROM 指定基础镜像,必须为第一个指令
- FROM image
- FROM image:tag
- FROM image@digest
- tag 和 digest 参数是可选的,如果不写,则默认选择最新的镜像
- MAINTAINER 维护者信息
- MAINTAINER zj
- MAINTAINER zj@163.com
- RUN 构造镜像时执行的命令
- 用于在镜像容器中执行命令,有两种方式
- shell执行: run command
- exec执行: run ['executable', 'param1', 'param2']
- ADD 将本地文件添加到容器中,tar文件会被自动解压, 网络文件不会被解压,可以访问网络资源,类似wget
- ADD home* /mydir/ 添加所有包含home的文件到mydir
- ADD hom?.txt /mydir/ ?代表一个字符
- ADD test relative/ 将test 添加到 workdir/relative/下
- ADD test /absolute/ 将test添加到 absolute/下
- COPY 功能类似于ADD, 但是不能用来解压tar文件,也不能用来访问网络文件
- CMD 构建容器后调用, 也就是在容器启动时调用
- CMD ['executable' , 'param1', 'param2']
- CMD ['param1', 'param2'] 设置了ENTRTPOINT 则执行entrypoint并添加参数
- CMD command param1 param2 ; 执行shell内置命令
- ENTRYPOINT 与cmd类似,只不过docker run执行的命令不会覆盖entrypoint , 而docker run指定的所有参数,都会作为参数传递给entrypoint
- ENV 设置环境变量
- ENV myname zj
- ENV mycat=cat
- EXPOSE 指定与外界交互的端口
- EXPOSE 80 443
- EXPOSE 8080
- EXPOSE并不会让容器的端口访问到主机,要使其访问,需要在docker run容器的时候通过 -p参数来发布这些端口
- WORKDIR 工作目录,类似于cd命令
- WORKDIR /a 此时工作目录在/a
- WORKDIR b 此时工作目录在 /a/b
- WORKDIR c 此时工作目录在 /a/b/c
- 通过workdir指定工作目录后,所有的run,cmd,entrypoint命令都会在工作目录执行,在使用docker run命令来运行容器的时候,可以通过-w参数来创建所需目录
-
dockerfile示例
-
# This my first nginx Dockerfile # Version 1.0 # Base images 基础镜像 FROM centos #MAINTAINER 维护者信息 MAINTAINER tianfeiyu #ENV 设置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在当前目录下,拷过去会自动解压 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ #RUN 执行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www #WORKDIR 相当于cd WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install RUN echo "daemon off;" >> /etc/nginx.conf #EXPOSE 映射端口 EXPOSE 80 #CMD 运行以下命令 CMD ["nginx"]
dokcerfile示例
FROM py36:v1 MAINTAINER zj.com ADD huancai /home/huancai WORKDIR /home/huancai ADD static /home/huancai/static ENTRYPOINT pip3 install -r require.txt ENTRYPOINT /bin/bash
docker build -t huancai:v1 .
docker run --net=host -v /home/static:/home/huancai/static huancai:v1 /bin/bash 设置网络和文件挂载