Linux_DockerDocker其他开发工具

Docker:使用和制作镜像(Dockerfile)

2021-06-15  本文已影响0人  xiaogp

摘要:Docker

镜像和容器


镜像搜索

Docker镜像存储在镜像仓库服务中,默认使用Docker Hub,Docker Hub分为官方仓库和非官方仓库,官方仓库会经过Docker公司的审核并且及时更新,安全质量高,非官方的仓库来自于江湖侠客,其中也不乏优秀的镜像,使用docker search来搜索镜像

root@ubuntu:/var/lib/docker# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10995               [OK]                
mariadb                           MariaDB Server is a high performing open sou…   4164                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   815                                     [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   88                                      
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   86                                      
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                                      [OK]
bitnami/mysql                     Bitnami MySQL Docker Image                      52                                      [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         44                                      
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                                      [OK]
prom/mysqld-exporter                                                              39                                      [OK]
tutum/mysql                       Base docker image to run a MySQL database se…   35                                      
linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   30                                      
schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   29                                      [OK]
centos/mysql-56-centos7           MySQL 5.6 SQL database server                   20                                      
circleci/mysql                    MySQL is a widely used, open-source relation…   20                                      
mysql/mysql-router                MySQL Router provides transparent routing be…   19                                      
arey/mysql-client                 Run a MySQL client from a docker container      17                                      [OK]
fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron tas…   13                                      [OK]
yloeffler/mysql-backup            This image runs mysqldump to backup data usi…   7                                       [OK]
genschsa/mysql-employees          MySQL Employee Sample Database                  7                                       [OK]
openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 image…   6                                       
devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offici…   3                                       
ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                                       [OK]
widdpim/mysql-client              Dockerized MySQL Client (5.7) including Curl…   1                                       [OK]
jelastic/mysql                    An image of the MySQL database server mainta…   1                                       

对以上命令和返回结果做几点说明

docker默认输出25行,使用--limit参数可以指定输出的行数,可以给search命令增加过滤条件,使用--filter获得官方仓库

root@ubuntu:/var/lib/docker# docker search mysql --filter "is-official=true"
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql               MySQL is a widely used, open-source relation…   10995               [OK]                
mariadb             MariaDB Server is a high performing open sou…   4164                [OK]                
phpmyadmin          phpMyAdmin - A web interface for MySQL and M…   240                 [OK]  

镜像下载、查看、删除

从Docker镜像仓库服务中拉取镜像使用命令docker pull,指定仓库名称标签即可找到指定的镜像,命令格式是

docker image pull <repository>:<tag>

如果不指定tag,默认拉取latest标签的镜像,如果要拉取指定tag版本的镜像,需要登录docker hub进行查找
https://hub.docker.com,比如查看docker上支持的MySQL版本,有8.0.25,8.0等

以mysql为例,分别指定tag镜像标签和不指定,使用docker images查看本地仓库存储的镜像

root@ubuntu:/var/lib/docker# docker pull mysql
root@ubuntu:/var/lib/docker# docker pull mysql:5.7
root@ubuntu:/var/lib/docker# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
mysql                               5.7                 2c9028880e58        4 weeks ago         447MB
mysql                               latest              c0cdc95609f1        4 weeks ago         556MB

删除镜像使用docker rmi,指定镜像名称或者镜像ID,当存在此镜像启动的容器正在运行或者此镜像是其他镜像所依赖的镜像时,不能直接删除

root@ubuntu:/var/lib/docker# docker rmi 2c9028880e58
Untagged: mysql:5.7
Untagged: mysql@sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Deleted: sha256:2c9028880e5814e8923c278d7e2059f9066d56608a21cd3f83a01e3337bacd68
Deleted: sha256:c49c5c776f1bc87cdfff451ef39ce16a1ef45829e10203f4d9a153a6889ec15e
Deleted: sha256:8345316eca77700e62470611446529113579712a787d356e5c8656a41c244aee
Deleted: sha256:8ae51b87111404bd3e3bde4115ea2fe3fd2bb2cf67158460423c361a24df156b
Deleted: sha256:9d5afda6f6dcf8dd59aef5c02099f1d3b3b0c9ae4f2bb7a61627613e8cdfe562

镜像命令整理


Dockerfile基础

Dockerfile是一个Docker镜像的描述文件,包含了若干个命令行,支持以#进行注释,它的结构分为基础镜像层维护者操作指令容器启动后指令,以一个简单的Dockerfile为例

# 基础镜像
FROM python:3.7
# 维护者
MAINTAINER gp
# 指定环境变量
ENV PIPURL "https://pypi.tuna.tsinghua.edu.cn/simple"
# 操作命令
ADD ./requirements.txt /home/
WORKDIR /home
RUN pip install --no-cache-dir -i ${PIPURL} --default-timeout=1000 -r requirements.txt
# 容器启动后指令
CMD gunicorn -c gun.conf.py manage:app

下面对Dockerfile的常用关键字进行总结:

其中CMD和ENTRYPOINT支持shell和exec模式,在Dockerfile中可以做如下改写

CMD ["gunicorn", "-c", "gun.conf.py", "manage:app"]

RUN中多个命令用&&隔开,可以在Dockerfile中做如下改写

RUN pip install flask==1.1.1 \
    && pip install Flask-SQLAlchemy==2.4.4 \
    && pip install gevent==20.9.0 \
    && pip install gunicorn==20.0.4 \
    && pip install numpy==1.19.5 \
    && pip install pymysql==1.0.0 \
    && pip install SQLAlchemy==1.3.13 \
    && pip install python-dotenv==0.15.0 \
    && pip install Flask-Caching==1.9.0

使用Dockerfile构建镜像

使用Dockerfile构建镜像使用docker build命令,启动如下

root@ubuntu:~/myproject/pira_score_web_application# docker build -t gp/pira_score:v1 .

docker build中最后的.代表当前目录,通常把Dockerfile放在执行docker build的当前目录下,其他主要参数如下

构建完成后查看docker本地镜像仓库

root@ubuntu:~/myproject/pira_score_web_application# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
gp/pira_score                       v1                  d3f18f8689fb        14 minutes ago      976MB

镜像的导入导出

镜像的导出使用docker save命令,例如

root@ubuntu:~# docker save echo_test:v1 > echo_test_v1.tar

注意save指定的镜像指定为镜像名+标签,否则load导入时镜像名为<none>,下一步在当下目录下生成镜像tar文件,scp到另一台机器上的docker服务上再load进去则会自动导入一个名称和标签一样的镜像

root@ubuntu:~# scp echo_test_v1.tar root@cloudera01:/home/gp
[root@cloudera01]# docker load < echo_test_v1.tar 
Loaded image: echo_test:v1
上一篇下一篇

猜你喜欢

热点阅读