美文网首页
Docker入门

Docker入门

作者: 无心Y | 来源:发表于2019-12-10 17:01 被阅读0次

docker 概念

  • 仓库(Repository): 镜像集合,保存和管理镜像
  • 镜像(Image): 容器的模板,静态概念,包含配置和定义(类似类)
  • 容器(Container): 包含运行时环境、内部代码、组件、依赖包等独立的单位,动态概念,镜像的实例(类似对象)

docker安装

# install in centos by yum
>>>yum install -y docker

# install by scripts
>>>yum update
>>>curl -fsSL https://get.docker.com/ | sh

# install in ubuntu
>>>sudo apt-get remove docker docker-engine docker.io containerd runc #      1. 卸载旧版本
>>>sudo apt-get update # 2. 更新软件包
>>>sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent \
    software-properties-common # 3. 安装依赖包
>>>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 4. 添加Docker官方GPG密钥
>>>sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 5. 添加存储库
>>>sudo apt-get install docker-ce docker-ce-cli containerd.io # 6. 安装docker

# 配置镜像源
>>>sudo vim /etc/docker/daemon.json  添加以下内容
{
    "registry-mirrors": ["https://49lr97vi.mirror.aliyuncs.com"]
}
>>>sudo systemctl daemon-reload
>>>sudo systemctl restart docker

docker服务启停

  • 开启docker服务:sudo service docker start
  • 重启docker服务:sudo service docker restart
  • 关闭docker服务:sudo service docker stop
  • 守护进程重启: sudo systemctl daemon-reload

docker镜像操作

  • 远程仓库搜索镜像:sudo docker search --limit 30 {keywords}
  • 从远程仓库拉取镜像:sudo docker pull {source}:{tag},未指定tag默认拉取最新的
  • 查询本地已有的镜像:sudo docker images
  • 镜像导出:sudo docker save -o {path} {image}
  • 镜像导入:sudo docker load --input {path}
  • 镜像删除:sudo docker rmi {image}
  • 修改镜像标签:sudo docker tag {org_image}:{org_tag} {image}:{tag}
  • 镜像的修改和发布(example)
    • 登录阿里容器镜像服务,创建私有仓库
    • 设置访问凭证
    • 拉取镜像:sudo docker pull {image}
    • 创建容器并开启虚拟终端:sudo docker run -it {image}
    • 修改容器内容,安装vim:sudo apt-get install vim
    • 提交修改:sudo docker commit -m "install vim" {image_id} {repository_url/path}, 生成本地镜像
    • 上传本地镜像至仓库:sudo docker push {local_image}

docker容器操作

  • 查看本地已有容器:sudo docker ps -a
  • 基于镜像创建一个容器:sudo docker run {image} {options}
    • 创建容器并在容器中执行指定命令:sudo docker run {image} echo "Hello"
    • 创建容器并开启交互式虚拟终端:sudo docker run -it {image}
    • 退出交互式虚拟终端:ctrl + p + q
    • 创建容器开启终端并在后台执行:sudo docker run -dt {image}
    • 创建容器,实现容器命名、挂载卷、端口映射
>>>sudo docker run \
                -d #后台运行
                -e "k=v" #设置环境变量
                -v {local_path}:{container_path} #本地文件挂载至容器
                -p {local_port}:{container_port} #本地端口映射容器端口
                --name {container_name}          #容器名
                {image}
  • 重命名容器:sudo docker rename {original_container} {container}
  • 容器启停
    • 开启容器:sudo docker start {container_id}
    • 重启容器:sudo docker restart {container_id}
    • 停止容器:sudo docker stop {container_id}
    • 结束容器:sudo docker kill {container_id}
  • 容器删除: docker rm {container_id}
  • 在正在运行的容器中执行命令
    • 通过容器执行:sudo docker exec {container_id} {cmd}
    • 为正在运行的容器开启一个虚拟终端:sudo docker exec -it {container_id} bash
    • 为正在运行的容器设置环境变量:sudo docker exec -e="k=v" {container_id}
  • 本地和运行中的容器互相拷贝数据
    • 本地拷贝到容器:sudo docker cp {local_path} {container_id}:{path}
    • 容器拷贝到本地:sudo docker cp {container_id}:{path} {local_path}
  • 查看容器日志
    • 查看实时日志:sudo docker logs -f -t --tail=100 {container_id} 最后100行
    • 查看某个时间段日志:sudo docker logs --since="start_time" --until="end_time" {container_id}
  • 查看容器内运行的进程:sudo docker top {container_id}

docker-file生成镜像

  • docker-file基本结构
# 1. 基础镜像: 表示在 ubuntu 镜像基础上进行扩展
FROM ubuntu

# 2. 维护者信息: 填写维护者的信息
MAINTAINER qianyin qianyin95@gmai.com

# 3. 镜像操作指令: 对镜像进行扩展, 安装 vim 工具
RUN apt-get update && apt-get install -y vim

# 4. 容器启动时执行指令: 指定新建容器在每次运行时需要执行的命令
CMD bash

# 5. 配置每次容器启动后需要执行的命令
ENTRYPOINT apt-get update

# 6. 配置容器内环境变量 ENV [键] [值]
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

# 7. 配置容器向外暴露指定端口号
EXPOSE [1194/udp, 27017, 8080]

# 8. 设置容器允许被挂载的目录或文件
VOLUME ["/etc/openvpn"]

# 9. 往容器添加文件 ADD [源路径] [目标路径]
ADD ./bin /usr/local/bin

# 10. 往容器拷贝本地文件 COPY [源路径] [目标路径]
COPY ./bin /usr/local/bin

# 11. 指定运行容器时的用户
USER root

# 12. 为容器配置工作目录
WORKDIR /home

# 13. 设置当所创建的镜像被作为基础镜像时需要执行的命令 ONBUILD [DockerFile 指令]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
  • docker build 创建镜像
# -t 指定构建出镜像的 [名称]:[标签] -f 指定Dockerfile路径
# 最后的./docker指定当前构建的context所在的位置,依赖的包可置于该路径下
>>>sudo docker build -t vim-ubuntu:1.0 ./docker

# 构建完运行容器并执行 vim --help 将会显示 vim 的帮助信息
>>>sudo docker run vim-ubuntu:1.0 vim --help

docker-compose

应用实例

通过docker快速搭建nginx服务
  1. 服务nginx相关配置
    • sudo mkdir conf
    • sudo docker cp $(sudo docker run -d --name tmp-nginx nginx):/etc/nginx/nginx.conf ./conf/nginx.conf 拷贝默认配置文件至本地
    • sudo docker rm -rf tmp-nginx 删除临时容器
  2. 运行容器
>>>sudo docker run \
                -d
                -p 8081:80 #本地8081端口映射至容器80端口
                -v $PWD/html:/usr/share/nginx/html \
                -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
                -v $PWD/logs:/var/log/nginx #本地文件挂载至容器
                --name nginx-web \
                nginx
>>>sudo chmod -R 777 conf html logs

相关文章

网友评论

      本文标题:Docker入门

      本文链接:https://www.haomeiwen.com/subject/ckvggctx.html