大数据,机器学习,人工智能大数据大数据 爬虫Python AI Sql

01-Docker相关内容学习

2019-02-22  本文已影响7人  张不二01

centos7: https://docs.docker.com/install/linux/docker-ce/centos/

Docker的安装使用

1, 卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2, 先安装依赖

我在安装的时候,第一次报错,重新执行了一次正常了

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

3, 设置安装仓库

我这里报错

# 执行前先把yum更新到最新,要不然可能会报错啥到
$ sudo yum update

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

4, 安装docker

$ sudo yum install docker-ce

# 如果需要指定安装版本,使用如下命令
$ sudo yum install docker-ce-<VERSION STRING>

5,启动docker

sudo systemctl start docker

6, 启动hello-world镜像检查是否安装正常

sudo docker run hello-world

7, 设置阿里云镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://08jkonzq.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

Dcoker的基本命令

1,帮助命令

docker version

docker info

docker --help

2, 镜像信息查看

$> docker images

# 列出本地所有镜像的详细信息(含中间映像层)
$> docker images -a

# 查询当前镜像的id值
$> docker images -q

# 查询当前所有镜像的id
$> docker images -qa

# 显示镜像的摘要信息
$> docker images --digests

3,镜像操作

# 具体参考2
$> docker images

$> docker search tomcat

# 查找star大于100的
$> docker search tomcat -s 100

# 下载镜像
$> docker pull tomcat

# 删除指定镜像,空格隔开可以删除多个
$> docker rmi hello-world
# 强制删除
$> docker rmi -f hello-world
# 删除所有的
$> docker rmi -f $(docker images -qa)

4,容器命令01

# 我们这里通过centos镜像创建一个centos容器然后演示docker的容器命令
$> docker pull centos

# 启动并创建容器, i代表interactive, t代表terminal
$> docker run -it 1e1148e4cc2c
$> docker run -it --name centos01 1e1148e4cc2c
$> docker run -it centos # 后面也可以直接跟名字就可以

# 列出所有正在运行的docker容器,这个是在宿主机上运行哈
$> docker ps
$> docker ps -a # 显示所有的,包括正在运行的和历史运行的
$> docker ps -l # 显示最近创建的容器
$> docker ps -n 3 # 显示最近创建的3个容器
$> docker ps -q # 静默模式,只显示当前正在运行的容器编号
$> docker ps --no-trunc # 不截断输出,显示信息的全部


# 从容器中退出,这个是在容器中运行哈
# exit是代表容器关闭,然后退出,ctrl代表容器不关闭,然后退出界面
$> exit
$> ctrl + P + Q


# 删除容器, 注意:只能删除已经停止的容器
$> docker rm 8dad94645d45
$> docker rm $(docker ps -qa)
$> docker rm -f $(docker ps -qa)

# 退出的容器重新启动
$> docker start 5455e2a3e728

# 重启容器
$> docker restart 5455e2a3e728

# 停止容器
$> docker stop 5455e2a3e728

# 强制停止容器
$> docker kill 5455e2a3e728

5, 容器命令02

# 守护进程式启动, 这个基本启动之后就会退出
$> docker run -d centos

# 守护线程, 并一直循环打印log,启动后ID是251fd9453a78
$> docker run -d centos /bin/sh -c "while true; do echo hello; sleep 2; done"

# 查看上面启动的那个守护线程的log
$> docker logs 251fd9453a78
$> docker logs -t 251fd9453a78 # 这个可以显示日志打印的时间
$> docker logs -t -f 251fd9453a78 # 显示时间并追加
$> docker logs -t -f -tail 10 251fd9453a78 # 从最后10行开始

# 查看top, 进程
$> docker top 251fd9453a78

# 查看docker内部细节
$> docker inspect 251fd9453a78

# 重新进入退出未关闭的容器01
$> docker attach f9e146bc4fd

# 重新进入退出未关闭的容器02,这里试了一下好像可以进入,但是无法执行内部命令,后面再看看#是因为之前没有加i,不能交互
$> docker exec -it f9e146bc4fd8 /bin/bash
# exec还有一个功能就是可以在不进入内部的时候执行容器命令
$> docker exec -t f9e146bc4fd8 ls /

# 容器内数据拷贝到主机
$> docker cp f9e146bc4fd8:/tmp/yum.log /root/

6, 镜像commit

# 运行tomcat并制定端口号, -p制定端口号, -P是随机分配端口
$> docker run -it -p 8080:8080 tomcat
$> docker run -it -P tomcat

# 进入到tomcat根目录下并删除掉文档目录
$> docker exec -it 35dc9c72f95f /bin/bash

# 提交没有文档的这个容器, a:author, m:message
$> rm -rf webapps/docs/
$> docker commit -a 'ivanl001' -m 'without docs' 35dc9c72f95f tomcat_without_docs:1.0

# 先删除当前运行的所有容器
$> docker rm -f $(docker ps -q)

# 运行刚才提交的那个image,注意:需要带版本号, 这个启动的容器中就没有文档
$>  docker run -it -p 8080:8080 tomcat_without_docs:1.0

# tomcat也可以后台守护进程运行 
$> docker run -d -p 8888:8080 tomcat_without_docs:1.0

7, Docker容器数据卷

7.1, 容器卷用-v, --volume list
# 启动容器,并把容器中的data目录和宿主机中的/data/docker/centos文件共享,双向同步哈
$> docker run -it -v /data/docker/centos:/data centos
# 通过如下方式进行查看具体的配置json格式
$> docker inspect c87d8c174f49

# read only:ro, 只读, 在容器中共享目录下文件是只读的,不能修改
$> docker run -it -v /data/docker/centos:/data:ro centos
# 通过如下方式进行查看具体的配置json格式
$> docker inspect c87d8c174f49
7.2, 容器卷用dockerfile
# volume test
FROM centos
VOLUME ["/data1", "data2"]
CMD echo "finished, success----------------"
CMD /bin/bash

docker images

数据卷容器

1, 父容器c00

docker run -it --name c00 dockerfile_image

2, 子容器c10

docker run -it --name c10 --volumes-from c00 dockerfile_image

3, 子容器c20

docker run -it --name c20 --volumes-from c00 dockerfile_image

4, 关闭c00

docker kill bdd11378491d

Dockerfile语法

Dockerfile是软件的原材料
Docker镜像是软件的交付品
Docker容器是软件的运行态

1, dockerfile的保留字

FROM        基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER  镜像作者
RUN         容器构建时候需要运行的命令
EXPOSE      容器暴露的端口号
WORKDIR     指定在创建容器后, 终端默认登录进来的工作目录,比如centos的/目录
ENV         用来在构建镜像过程中设置环境变量
ADD         将宿主机目录下的文件拷贝进镜像且ADD命令或自动处理uRL和解压tar压缩包
COPY        将宿主机目录下的文件拷贝进镜像
            COPY src dest
            COPY ['src', 'dest']
VOLUME      容器数据卷,用于数据保存和持久化工作
CMD         指定一个容器启动时候所需要执行的命令
            Dockerfile中可以有多个CMD命令,但是只有最后一个会生效,CMD会被docker             run之后的参数替换
ENTRYPOINT  指定一个容器启动时要运行的命令
            ENTRYPOINT的目的和CMD一样, 都是在指定容器启动程序及参数
ONBUILD     
build both run
FROM WORKDIR CMD
MAINTAINER USER ENV
COPY EXPOSE
ADD VOLUME
RUN ENTRYPOINT
ONBUILD
.dockerignore

2, Dockerfile自定义镜像

from centos

ENV mypath /data
WORKDIR $mypath

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD /bin/bash
2.1, 构建镜像

docker build -f /data/docker/dockerfile/dockerfile01 -t cus_centos:1.0.0 .

2.2, 运行容器

docker build -f /data/docker/dockerfile/dockerfile01 -t cus_centos:1.0.0 .

2.3, 查看镜像历史

docker history a35c41a18525

3, CMD和ENTRYPOINT

3.1, CMD
3.2, ENTRYPOINT(先不练习了)
上一篇 下一篇

猜你喜欢

热点阅读