Docker基础操作

Docker介绍

摘自Wiki
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

Docker三要素:仓库(Registry),镜像(image),容器(container)。

Docker仓库

仓库(repository)是集中存放镜像文件的场所,目前 Docker 官方维护了一个公共仓库 Docker Hub。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。如果需要搭建私人仓库,也可以自行搜索搭建方式。

Docker镜像

镜像可以理解为一个安装包,是用于创建容器的基石。

Docker容器

容器可以理解为安装包安装之后的软件。

在我们对容器(一个linux系统)进行更改之后(安装mysql),可以将我们将现有的系统重新打包成安装包(镜像)。下一次我们基于这个新镜像创建容器时,mysql也被配置成功了。

对于这三要素的专业解释请参考:https://docs.docker.com/get-started/overview/

镜像操作

镜像搜索:

以Centos系统镜像为例:
docker search centos :在仓库中查询需要的镜像
--filter “is-official=true|false” : 可以过滤官方镜像和非官方镜像

[root@localhost ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6318                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              132                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   123                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   116                                     [OK]

镜像拉取:

docker image pull <repository>:<tag> :

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

查看本地镜像:

docker images

[root@localhost ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
centos                latest              300e315adb2f        31 hours ago        209MB
oracle/database       12.2.0.1-ee         be6e5464fe21        2 weeks ago         6GB
oracle/database       19.3.0-ee           06dfbbc1700a        3 weeks ago         6.53GB

镜像导入导出:

docker 镜像导入导出有两种方法:

一种是使用 save 和 load 命令

使用例子如下:

docker save centos:latest -o centos.tar 
docker load -i centos.tar

一种是使用 export 和 import 命令将容器导入导出成镜像

使用例子如下:

docker export saim_tes -o centos.tar 
docker import centos.tar

解决导入镜像repository和tag为none问题:
docker tag IMAGEID TARGET_IMAGE[:TAG]

需要注意的是:
export 和 import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。
dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。

快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。

docker save 保存的是镜像(image),docker export 保存的是容器(container);
docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称

容器操作

创建容器:

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-d: 后台运行容器,并返回容器ID;

[root@localhost ~]# docker run -it --name=saim_tes centos:latest /bin/bash
[root@b9779a8b58a7 /]# 

查看本地容器:

这里可以看到b9779a8b58a7 为容器的id,可以通过docker ps -a 查看所有容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS                     PORTS                                                                        NAMES
b9779a8b58a7        centos:latest                 "/bin/bash"              About a minute ago   Up About a minute                                                                                       saim_tes
13ca19d9e505        f1cb7c7d58b7                  "/bin/bash"              About an hour ago    Up 32 minutes              0.0.0.0:8002->8002/tcp, 0.0.0.0:8010->8010/tcp, 0.0.0.0:9088->9088/tcp       saim
6ec9c3e69d28        centos:7.6.1810               "/bin/bash"              4 hours ago          Exited (0) 4 hours ago                                                                                  kind_villani

saim_tes就是我们刚刚创建的容器。

退出容器:

[root@b9779a8b58a7 /]# exit        
exit
[root@localhost ~]# 

开启和关闭容器:

[root@localhost ~]# docker stop saim_tes
saim_tes
[root@localhost ~]# docker start saim_tes
saim_tes
[root@localhost ~]# 

进入容器:

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

[root@localhost ~]# docker exec -it saim_tes /bin/bash
[root@b9779a8b58a7 /]# 

将容器创建新镜像:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值