实践中, 了解镜像和容器的操作
什么是 docker? Docker 是一个开放源代码软件项目, 让应用程序部署在软件货柜下的工作可以自动化进行, 借此在 Linux 操作系统上, 提供一个额外的软件抽象层, 以及操作系统层虚拟化的自动管理机制.
镜像的几个小操作
搜索镜像
docker search nginx
下载镜像到 local
docker pull image_name
归档镜像
docker image save image_name> xxx.tar
加载一个 tar 到环境中
docker image load < xxx.tar
容器的基本操作
docker 有个基本的要求: 一个容器, 一个 application.
创建 nginx 的容器
docker container run -d -e test=123 -p 8848:80 -h docker172.0 --name ngin3 -m="10m" --memory-swap="100m" --cpus=".5" --oom-kill-disable nginx
列出最新创建的容器
docker ps -l
查看容器资源使用率
docker states name
进入容器和启停
- docker exec -it container_id bash|sh
- docker start/stop/restart container_id
查看容器的日志
docker logs --tail=200 containerid
-d 后台运行
-e 设置环境变量
-p 设置端口转发
-P 任意端口转发
-h 设置容器的 hostname
--name 设置容器的 name
-m 分配内存
--cpus 分配的 CPU core
--oom-kill-disable 禁用, 内存溢出会自动 kill 进程, 容器不加限制的话建议不加该选项
容器的数据卷
推荐两种数据卷的方式 volume,bind mount
volume
特点:
1. 没创建会自动创建, 默认目录 / var/lib/docker/volume/_data
2. 容器的文件系统与数据卷的数据共享, 可以最容器的数据的持久化
3. 可以共享多个容器, docker 迁移
4. 可以动态修改的文件
创建数据卷
docker volume create 卷名
- Commands:
- create Create a volume
- inspect Display detailed information on one or more volumes
- ls List volumes
- prune Remove all unused local volumes
- rm Remove one or more volumes
- docker container run -d --mount src=nginx_vol,dst=/usr/share/nginx/html nginx
- bind mount
特点:
1. 挂载宿主机任意的文件系统到容器, 容器内目录以宿主机那侧为主
2. 应用发布, 主机文件系统与容器的需要一致
docker container run -d --mount type=bind,src=/mnt,dst=/usr/share/nginx/HTML nginx
docker 网络模式
桥接 bridge
默认模式 容器创建后会创建个 docker0 的网桥, 默认创建的容器都会添加到这个网桥 (网关)
主机模式 --net=host
与宿主机公用一个 network namespace 除了网络不隔离 其他都隔离, 直接用 host 的 ip 访问容器, 但是 docker host 上的端口不能用了, 网络性能好 但是隔离性差, 网络不隔离, share 端口范围, 文件系统和进程列表隔离
none
独立 network namespace, 网络隔离 但是 ip 得自己配
container:name/ID
和设置的容器用一个 network namespace , 网络不隔离, 进程列表和文件系统都隔离
自定义
和 bridge 相似, 需要先创建一个网桥, 创建后有一个自定义 DNS, 可以主机名和容器名互信
docker network create 网络模式名称
docker run -itd --name test1 --net=test busybox
制作镜像 Dockerfile
流程:
1.FROM 基于的镜像
2.MAINTAINER 作者名 / 网址
3.RUN shell 的命令
4.COPY 将文件 copy 到容器
5.EXPOSE 80 声明端口
CMD ["run.sh"] 容器创建后执行命令, 可以被 docker run 指定的命令覆盖
nginx 基础 dockerfile 代码
- [root@192-168-1-218 dockerfile_workdir]# cat Dockerfile-nginx
- FROM CentOS:7
- MAINTAINER Mark
- RUN yum -y install gcc gcc-c++ automake pcre pcre-devel zlip \
- zlib-devel openssl openssl-devel.NET-tools telnet wget curl && \
- #优化
- yum clean all && rm -fr /var/cache/yum/*
- RUN wget http://nginx.org/download/nginx-1.17.8.tar.gz && tar xf nginx-1.17.8.tar.gz && \
- cd nginx-1.17.8 && \
- ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module \
- --with-http_realip_module --with-threads && make && make install && \
- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- ENV PATH $PATH:/usr/local/nginx/sbin
- #COPY /dockerfile_workdir/test.txt /root
- WORKDIR /usr/local/nginx
- EXPOSE 80
- CMD ["nginx", "-g", "daemon off;"]
构建镜像
docker build -t nginx:v1 -f Dockerfile-nginx .
-t 镜像名和 tag
-f Dockerfile 的文件
. dockerfile 里的文件位置, 比如 COPY 就必须要放文件在这个. 的目录下
来源: https://www.cnblogs.com/linux-error/p/12380514.html