docker入门(个人笔记)

安装 docker

LINUX 环境为 centos7

使用 yum 安装

yum install docker

启动 docker

systemctl start docker.service

设置开机启动

systemctl enable docker.service

docker 常用指令

使用 run 创建一个 docker 镜像

# -i 表示 持续交互输入,-t 则是选择一个镜像文件,/bin/bash 则是表示这个容器提供一个shell交互, --name 指定docker容器的名字,这条指令会我们创建一个拥有最基本功能的centos容器,你可以把它当虚拟机使用
docker run --name first_docker -i -t centos /bin/bash

使用 exit 退出 docker 镜像,由于这是一个交互式docker容器,所以已退出容器就会停止运行

exit

使用 info 查看 docker 信息

docker info

使用 ps 查看 docker 容器信息

# 查看正在运行的 docker 容器信息
docker ps
# 查看所有 docker 容器信息
docker ps -a

使用 start 启动 docker 容器,stop 停止 docker 容器,restart 重启 docker 容器,attach 进入 docker 容器

docker ps -a

# 后面接容器的 id 或者 名字
docker start name/id

docker stop name/id

docker restart name/id

docker attach name/id

创建一个守护进程 docker

# -d 表示进程后台执行,-c 是执行命令,这里用了while true,所以表示这个守护进程会在后台一直执行hello world

docker run --name hello_world -d centos /bin/sh -c "while true;do echo hello world; sleep 1; done"

使用 logs 查看 docker容器日志, –tail number 可以查看最近几条日志, -f 监控日志, -t 显示时间戳

docker logs hello_world

docker logs --tail 10 hello_world
# 使用 -t 显示时间戳,-f 实现监控
docker logs --tail 10 -ft hello_world

使用 top 查看容器内部进程

docker top hello_world

使用 exec 在容器内部运行新进程

# 运行后台任务
docker exec -d first_docker mkdir test
# 进行交互命令, 创建 TTY 捕捉 STDIN
docker exec -t -i hello_world /bin/bash

使用 inspect 查看容器详细信息

docker inspect hello_world

使用 rm 来删除容器,删除之前需要先停止容器的运行

docker rm hello_world

使用 images 列出镜像

docker images

使用 pull 拉取 仓库镜像,镜像之间使用 tag 来区分

# 拉取 centos 仓库的所有镜像
docker pull centos

使用 search 查询仓库镜像

docker search centos

使用 commit 提交镜像 (不推荐)

# id/name 是容器,repository是仓库,tag是标签
docker commit id/name repository:tag

使用 rmi 删除镜像

# image_name 是镜像名
docker rmi image_name

使用 dockerfile 构建文件 和 build 指令创建镜像 (推荐,便于调试错误)

# 构建文件详解,注意所有的构建指令必须大写,如FROM,RUN
# 使用#来进行注解
#Version: 0.0.1
# From 表示使用什么镜像进行基础构建
From centos
# MAINTAINER 表示作者的基本信息
MAINTAINER Yiyang Zeng "[email protected]"
# Run 表示针对基本的镜像在执行指令进行拓展,比如这里就是导入的两个包,可以使用wget指令
Run yum -y install iproute
Run yum -y install wget
# 开发的端口
EXPOSE 80

# -f 是构建文件的路径,-t 是镜像文件的仓库以及标签信息,不要忘记最后还有一个小点
docker build -f ./my_centos -t zyy/centos:first .

使用 history 查看镜像的创建过程

# image_id 是镜像的ID
docker history image_id

run 指令中使用 -p 来绑定端口

# 宿主机的 9527 绑定 容器的80,不指定宿主机,则会在 49153-65535 之间进行随机选择
docker run --name first_build -p 9527:80 -t -i e2906ce60fb1 /bin/bash

使用 port 查看容器端口情况

docker port first_build

使用 push 将镜像上传到 docker hub

# zyy2404 是 docker hub 的用户名,没有要求注册
docker push zyy2404/centos:first

问题:推送过程可能会不成功即出现下面这种情况getsocket:connection refused.

vi /etc/docker/daemon.json
# 根据registry的ip地址
增加"insecure-registries": ["192.168.56.101:5000"]

查看仓库拥有的镜像

使用 浏览器访问 http://服务器IP:5000/v2/_catalog

DockerFile指令

使用 CMD 来指定容器启动时的指令,和 RUN 的区别在于一个是启动,一个是构建

# 执行 start,run 指令时会进入shell交互,
CMD ["/bin/bash"]

# 执行 CMD 中的 /bin/bash 进入命令行
docker run --name second_docker -t -i centos

# CMD 和 run指定的命令互斥,此时不会执行CMD的命令,所以只会执行 /bin/ps
docker run --name second_docker -t -i centos /bin/ps

使用 ENTRYPOINT 来指定启动时指令,和 CMD 不同的是,它不会被 run 覆盖,除非 run 使用了 --entrypoint

# 例子: 使用 java -jar 启动一个 java 工程,注意这种路径不是容器中的路径,只是为了代表一个绝对路径
ENTRYPOINT["/home/zyy/app/jdk1.8.0_144/bin/java","-jar","/home/zyy/app/CALS.jar"]

# 可以和run结合使用
ENTRYPOINT["/home/zyy/app/jdk1.8.0_144/bin/java"]
docker run --name first_java -t -i cals -jar /home/zyy/app/CALS.jar

# 可以和 CMD 结合使用
ENTRYPOINT["/home/zyy/app/jdk1.8.0_144/bin/java"]
CMD["-jar","/home/zyy/app/CALS.jar"]

使用 WORKDIR 设置工作目录

# 设置当前工作目录,相当于 cd
WORKDIR /var/log

# run 也可以达到同样的效果
docker run --name first_java -t -i cals -w /var/log pwd

使用 ENV 设置环境变量

# 比如设置 jdk 的环境变量
ENV JAVA_HOME /home/zyy/app/jdk1.8.0_144/bin/java

# 在构建过程中,往后可以使用这个环境变量
ENTRYPOINT[$JAVA_HOME]

使用 USER 指定用户

USER zyy
USER user:group

# docker run 也可以指定
run -u zyy

使用 VOLUMN 来向基于镜像创建的容器添加卷

# 可以添加多个卷
VOLUMN["/opt/project","/data"]

使用 ADD 从构造环境目录复制文件到容器中

# 如果文件是归档文件,还会进行解压
ADD test_add.txt /home/zyy

使用 COPY 也可以复制,不同在于不会进行解压和提取

COPY test_add.txt /home/zyy

使用 ONBUILD 来设置触发器,也就是当它被用作基础镜像时,在 FROM 之后会执行触发器的命令

ONBUILD RUN yum -y install wget
ONBUILD JAVA_HOME /home/zyy/app/jdk1.8.0_144/bin/java

创建 Docker Registry

可以直接使用docker提供的开源镜像 registry

docker run -p 5000:5000 registry

更改 tag

docker tag 7b645f38ac65 服务器IP:5000/zyy2404/centos:first

pushregistry

docker push 服务器IP:5000/zyy2404/centos:first

dockerfile 实例

使用 dockerfile 生成 redis 容器

#Version: 0.0.1
FROM centos
MAINTAINER Yiyang Zeng "[email protected]"
#RUN yum -y update
RUN mkdir redis
WORKDIR /redis
RUN yum -y install wget gcc make
# 注意这里需要在dockerfile 目录放置要复制的配置文件
ADD redis.conf /redis/redis.conf
RUN wget http://download.redis.io/releases/redis-5.0.3.tar.gz
RUN tar -axvf redis-5.0.3.tar.gz
WORKDIR /redis/redis-5.0.3
RUN make && make install
EXPOSE 6379
ENTRYPOINT ["/usr/local/bin/redis-server"]



docker run --name first_redis -p 5555:6379 878c9ac5369f /redis/redis.conf

使用 dockerfile 生成 python 容器

#Version: 0.0.1
FROM centos
MAINTAINER Yiyang Zeng "[email protected]"
RUN mkdir python
WORKDIR /python
RUN yum -y update
RUN yum -y install wget
RUN wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
RUN tar -axvf Python-3.6.0.tgz
RUN yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel make gcc-c++ gcc
WORKDIR /python/Python-3.6.0
RUN ./configure --prefix=/usr/local && make -j 4 && make install
EXPOSE 22


docker run --name first_python -p 7777:22 -t -i 01f219235679 /bin/bash

你可能感兴趣的:(docker)