Docker入门
2019-12-10 本文已影响0人
无心Y
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服务
- 服务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 删除临时容器
- 运行容器
>>>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