docker(二)

上一篇是介绍了docker概述以及docker中核心基本概念:镜像、仓库、容器,并在linux上安装了docker,设置了阿里云加速,并且下载了几个镜像。这一篇我们介绍docker镜像、仓库、容器管理。

一、镜像

1.1 查看本地仓库中所有镜像

root@ubuntu16server:/home/yufeiliu# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.16.0              18ff9f3390d6        47 hours ago        109MB
nginx               1.15.12             53f3fd8007f7        47 hours ago        109MB
mysql               5.6                 73829d7b6139        2 days ago          256MB
ubuntu              latest              d131e0fa2585        13 days ago         102MB

1.2 从远程仓库中下载

root@ubuntu16server:/home/yufeiliu# docker pull node
Using default tag: latest
latest: Pulling from library/node
Digest: sha256:ce2fa85adcf94c2366f2d8dfe1f6471451020f8bdb663c691192fddcceacc978
Status: Image is up to date for node:latest
root@ubuntu16server:/home/yufeiliu# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                latest              502d06d3bfdf        27 hours ago        906MB
nginx               1.16.0              18ff9f3390d6        47 hours ago        109MB
nginx               1.15.12             53f3fd8007f7        47 hours ago        109MB
mysql               5.6                 73829d7b6139        2 days ago          256MB
ubuntu              latest              d131e0fa2585        13 days ago         102MB

1.3 打tag

root@ubuntu16server:/home/yufeiliu# docker tag ubuntu:latest ubuntu:123
root@ubuntu16server:/home/yufeiliu# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                latest              502d06d3bfdf        27 hours ago        906MB
nginx               1.16.0              18ff9f3390d6        47 hours ago        109MB
nginx               1.15.12             53f3fd8007f7        47 hours ago        109MB
mysql               5.6                 73829d7b6139        2 days ago          256MB
ubuntu              123                 d131e0fa2585        13 days ago         102MB
ubuntu              latest              d131e0fa2585        13 days ago         102MB

这里其实我们就应该可以猜到docker的基本原理了,为了节省镜像大小,采用的指针的方式,每一次变更都是一层,最终将所有层放在一起就是一个完整的镜像。ubuntu:123这是一个新镜像,但是由于层相同所以它们的imageID是一样的。

1.4 删除镜像

root@ubuntu16server:/home/yufeiliu# docker rmi ubuntu:123
Untagged: ubuntu:123
root@ubuntu16server:/home/yufeiliu# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                latest              502d06d3bfdf        27 hours ago        906MB
nginx               1.16.0              18ff9f3390d6        47 hours ago        109MB
nginx               1.15.12             53f3fd8007f7        47 hours ago        109MB
mysql               5.6                 73829d7b6139        2 days ago          256MB
ubuntu              latest              d131e0fa2585        13 days ago         102MB

1.5 创建镜像

    创建一个新镜像有两种做法,我们可以启动一个容器,在容器中做一些操作,然后将这个容器保存成为镜像。第二种是使用dockerfile直接由镜像产生镜像,这种方式更加实用。

    一般情况下我们是写出dockerfile,但是dockerfile执行什么命令?怎么执行?我们需要参考容器安装。

1.5.1 容器方式创建新镜像

    我这里创建一个jdk的镜像,就是在ubuntu镜像中安装jdk。大致步骤:

    1、基于ubuntu:latest启动容器

    2、将jdk包从宿主机拷贝到容器中

    3、完成安装

    4、将容器搞成镜像

    5、上传到远程仓库中

    1.5.1.1 启动容器

root@ubuntu16server:/home/yufeiliu# docker run -it ubuntu:latest /bin/bash
root@7ecae32c4273:/# cd /home/
root@7ecae32c4273:/home# ls
root@7ecae32c4273:/home# mkdir software work
root@7ecae32c4273:/home# ls
software  work
root@7ecae32c4273:/home# exit
exit

    这里需要说明几点:

    1、参数-i表示交互,-t表示带有终端

    2、/bin/bash表示容器启动的程序,这一点是和虚拟机最大的不同,虚拟机启动是回启东一坨进程,但是容器启动只会启动必要进程,其他进程需要用户指定才会启动,比如/bin/bash需要用户单独启动。

    3、启动完成之后我创建了两个文件夹,用于后续安装使用。我需要将安装包拷贝到容器中,所以我需要退出容器

    1.5.1.2 上传文件

root@ubuntu16server:/home/yufeiliu# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@ubuntu16server:/home/yufeiliu# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
7ecae32c4273        ubuntu:latest       "/bin/bash"         48 seconds ago      Exited (0) 27 seconds ago                       wizardly_stallman
root@ubuntu16server:/home/yufeiliu# docker cp /home/yufeiliu/software/jdk-8u144-linux-x64.tar.gz 7ecae32c4273:/home/software
root@ubuntu16server:/home/yufeiliu# docker restart 7ecae32c4273
7ecae32c4273
root@ubuntu16server:/home/yufeiliu# docker attach 7ecae32c4273
root@7ecae32c4273:/# cd /home/software/
root@7ecae32c4273:/home/software# ls
jdk-8u144-linux-x64.tar.gz
root@7ecae32c4273:/home/software#

    说明:

    1、docker ps查看所有运行状态的docker容器,由于我已经执行exit,/bin/bash这个进程已经结束,所以容器处于结束状态

    2、docker ps -a查看所有状态的docker容器,找到了我们的容器

    3、使用docker cp命令用于宿主机和容器之间拷贝文件

    4、这时候容器已经有了这个文件,我需要让它重新运行,所以使用docker restart

    5、重启之后我们发现没有按照希望的那样有bash交互,所以我们需要使用docker exec或者docker attach进入容器中,完成安装工作

   1.5.1.3 打成镜像并上传到远程仓库

root@ubuntu16server:/home/yufeiliu# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7ecae32c4273        ubuntu:latest       "/bin/bash"         18 minutes ago      Up 11 minutes                           wizardly_stallman
root@ubuntu16server:/home/yufeiliu# docker commit
"docker commit" requires at least 1 and at most 2 arguments.
See 'docker commit --help'.

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes
root@ubuntu16server:/home/yufeiliu# docker commit 7ecae32c4273 jdk:2.0
sha256:c64bad75d6a69ab6a430c51b80aca7a9d14143cb2882be7e8aef8c6fd916b3d8

1.5.2 dockerfile方式创建新镜像

root@ubuntu16server:/home/yufeiliu/work/docker/jdk-3.0# cat Dockerfile
FROM ubuntu
MAINTAINER yufei.liu

RUN mkdir -p /home/software
COPY jdk-8u144-linux-x64.tar.gz /home/software/jdk-8u144-linux-x64.tar.gz
WORKDIR /home/software
RUN tar -zxvf jdk-8u144-linux-x64.tar.gz
ENV JAVA_HOME /home/software/jdk1.8.0_144/
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

只需要执行:

docker build jdk:3.0 .

注意:

    1、文佳名是Dockerfile

    2、将上传的文件jdk-8u144-linux-x64.tar.gz放在Dockerfile文件同级

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值