Docker笔记

资源
7 步精简 Docker 镜像几百MB(上)
Dockerfile最佳实践
Docker中文文档

安装Docker

#安装Docker
wget -qO- https://get.docker.com/ | sh

#设置开机自启
sudo systemctl enable docker
sudo systemctl start docker

#添加用户到docker组,后续不用每次都sudo执行命令
sudo groupadd docker
sudo usermod -aG docker $USER

镜像管理

#镜像仓库
docker search   搜索镜像,如 docker search ubuntu 
docker pull    从docker-hub下载镜像,docker pull ubuntu:16.04
docker login   登录docker-hub账号,方便后面将自己的镜像同步到docker-hub服务器端
docker push   将自己建立的镜像同步到docker-hub中

#本地镜像管理
docker images   查看本地镜像
docker rmi   删除指定镜像,可指定-f参数强制删除
docker tag   标记某镜像,docker tag ubuntu:15.10 runoob/ubuntu:v3,将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像
docker history   查看镜像的创建历史
docker save   将指定镜像打包,docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3,将镜像runoob/ubuntu:v3 生成my_ubuntu_v3.tar文档
docker import   从归档文件中创建镜像,docker import  my_ubuntu_v3.tar runoob/ubuntu:v4,从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4
docker build   从dockerfile创建镜像,docker build  -t biodocker:v1 .

容器操作

docker ps    列出运行的容器的信息
docker inspect    获取容器/镜像的元数据
docker top   查看容器中运行的进程信息,支持 ps 命令参数,docker top mymysql
docker attach :连接到正在运行中的容器
docker events   从服务器获取实时事件
docker logs   获取容器的日志,docker logs -f mynginx,跟踪查看容器mynginx的日志输出
docker port   列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口,docker port mymysql,查看容器mynginx的端口映射情况
docker cp   主机与容器之间的数据拷贝,docker cp /www/runoob 96f7f14e99ab:/www/,将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
docker commit   从容器创建一个新的镜像
docker diff   检查容器里文件结构的更改
docker run   创建一个新的容器并运行命令,常用方式为docker run -it ubuntu:16.04
docker start/stop/restart   启动,停止,重启一个容器,docker start ubuntu
docker kill   杀掉一个运行中的容器
docker rm   删除一个容器
docker pause/unpause   暂停/恢复容器中所有的进程
docker exec   在运行的容器中执行命令,docker exec -it mynginx /bin/sh /root/runoob.sh,在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本

#################################################################
一个使用dockerfile创建镜像的栗子:

docker build --no-cache=true -t biodocker:v1
# --no-cache:不使用缓存,每条指令都重新生成镜像(速度会很慢)
# -f:明确指定Dockerfile
# -t:给生成的镜像打上标签

dockerfile中的命令

FROM

第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。
格式为 FROM FROM :

MAINTAINER

格式为 MAINTAINER ,指定维护者信息。

RUN

把复杂的或过长的 RUN 语句写成以 \ 结尾的多行的形式,以提高可读性和可维护性。

RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y \
    bzip2 \
    wget
EXPOSE

在Dockerfile中你可以映射私有和公有端口,但永远不要通过Dockerfile映射公有端口。这样运行多个镜像的情况下会出现端口冲突的问题。

EXPOSE 80:8080    # 80映射到host的8080,不提倡这种用法
EXPOSE 80   # 80会被docker随机映射一个端口
ADD COPY

虽然 ADDCOPY 功能类似,但推荐使用 COPYCOPY 只支持基本的文件拷贝功能,更加的可控。而 ADD 具有更多特定,比如tar文件自动提取,支持URL。 通常需要提取tarball中的文件到容器的时候才会用到 ADD

CMD ENTRYPOINT

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
CMDENTRYPOINT 支持两种语法:

CMD /bin/echo
CMD ["/bin/echo"]
VOLUME

格式为 VOLUME ["/data"]
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

USER

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。

WORKDIR

WORKDIR 的路径始终使用绝对路径可以保证指令的准确和可靠。 同时,使用 WORKDIR来替代 RUN cd ... && do-something 这样难以维护的指令。
格式为 WORKDIR /path/to/workdir
为后续的 RUNCMDENTRYPOINT 指令配置工作目录。

你可能感兴趣的:(Docker笔记)