Docker 使用总结

本文是Docker使用教程,涵盖初识Docker、基本指令、Dockerfile编写等内容。介绍了如何创建、管理容器,端口映射,环境变量设置,容器和镜像的导出导入,以及Dockerfile中如FROM, RUN, ENV等指令的用法。" 125228402,7783893,MATLAB图像处理:点运算、算术运算与几何变换,"['MATLAB', '图像处理', '计算机视觉']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker在平时的使用中还是比较常见的,这里简单介绍一下docker以及其使用方法,希望对大家有用。

0x01 初识docker

Docker 从 0.9 版本开始使用 libcontainer 替代 lxc,libcontainer 和 Linux 系统的交互图如下:
这里写图片描述

并且docker安装容器的操作系统位数和物理机是统一的,也就是说64位操作系统只能使用64位docker容器,docker分为image和容器,一个镜像可以生成多个容器,并且容器的环境是相同的。

0x02 基本指令

参数:
–name 指定容器的名字
–rm 容器运行完毕会自动删除
-i -t 创建一个提供交互式shell的容器。
-d 在后台运行容器,并且打印出容器的ID。
-v 目录挂载 前面的是主机后面的是容器
–privileged 拥有真正的root权限
后面加的是容器刚生成是运行的程序默认是/bin/bash

0x1 容器生成

docker run --name weblogic -i -t centos
上述命令会生成一个名字为weblogic 的交互式容器,默认执行的是/bin/bash,所以会进入交互界面。如果本地没有centos的镜像会从远程下载到本地。

0x2 生成容器时的其他属性

docker run 命令用于生成容器 ,生成容器的属性之后不能再改变

端口映射

一般拥有web服务的容器都进行端口映射,将docker的80端口映射到主机的8000端口
docker run -d -p 8000:80 foo/live /bin/bash

环境变量

在配置mysql docker的时候使用-e参数设置环境变量
docker run --name first-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql

0x3 打开/关闭/附加/删除

docker start id 使上述生成的容器启动
docker stop id 使上述生成的容器关闭
docker exec -it id /bin/bash 附加正在运行的容器
docker attach continer id/name
当重新启动容器时,会沿用创建容器(docker run)命令时指定的参数来运行,可能需要按回车才进入。
这时就已经相当于在容器内部了的shell操作了。如果操作过程中,退出了shell。容器也会随之停止。

exec与attach的区别是当exit容器的时候exec不停止容器,而attach会将容器停止


删除时必须保证容器时关闭的
docker rm name/id 删除指定容器
删除所有镜像
docker rmi $(docker images -q)1
根据格式删除所有镜像
docker rm $(docker ps -qf status=exited)

0x4 压缩/导出/上传

我们用镜像生成了容器,然后我们可以将容器生成镜像,然后将镜像打成压缩包方便导入导出,同时也可以把镜像上传至dockerhub,供别人下载使用

压缩(容器)

我们使用容器 furious_bell,现在要将这个容器保存为一个文件 myunbuntu-export-1204.tar
docker export furious_bell > /home/myubuntu-export-1204.tar

导入

docker import /home/myubuntu-export-1204.tar alias

压缩(镜像)

这里有个基础镜像:ubuntu:12.04,现在要将这个镜像保存为一个文件myubuntu-save-1204.tar
docker save 9610cfc68e8d > /home/myubuntu-save-1204.tar
有点慢,稍微等待一下,没有任何warn信息就表示保存OK。9610cfc68e8d 是镜像ID

导入

docker load /home/myubuntu-export-1204.tar alias

上传至远程仓库

首先拥有一个dockerhub账号
上传之前要登录
docker login
然后输入用户名密码

docker login
docker tag id username/repositoryname:tag
docker push username/repositoryname:tag

关于docker file的编写,有时间再补上

0x3 Dockerfile 编写

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。

首先给个实例
运行指令docker build -t name .

FROM ubuntu:16.04 

MAINTAINER 4t10n <act01n@163.com>
ENV DEBIAN_FRONTEND noninteractive 
#这里添加更新源 
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

RUN apt-get update -y && \ 
    apt-get install -y apache2 \
    vim \
    tar \
    php7.0-fpm \
    php7.0-mcrypt \ 
    php7.0-mysql  \ 
    mysql-client \
    mysql-server   \
    && /etc/init.d/mysql start \
    && mysqladmin -uroot password root  \
    && rm -rf /var/lib/apt/lists/* 

WORKDIR /tmp  
#COPY  ./start.sh  /tmp/
#COPY  ./init.sql  /tmp/ 
#RUN  chmod a+x start.sh 

#设置数据库 
RUN set -x \
    && service mysql start \ 
    && mysql  -e "CREATE DATABASE  blog  DEFAULT CHARACTER SET utf8;"  -uroot  -proot \ 
    &&  mysql -e "grant select,insert on blog.* to 'admin'@'localhost' identified by 'password' "  -uroot -proot  

# copy 源码
#COPY  ./default /etc/nginx/sites-available/default
#COPY ./src /usr/share/nginx/html/
COPY ./1.php /var/www/html/

# 设置可写权限 
RUN chown -R  www-data:www-data /var/www/html/
EXPOSE 80 3306 

CMD ["/tmp/start.sh"]

贴上一个环境较为完整的docker镜像的dockerfile

FROM ubuntu:16.04 

MAINTAINER 4t10n <act01n@163.com>
ENV DEBIAN_FRONTEND noninteractive 

RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

RUN apt-get update -y && \ 
    apt-get install -y software-properties-common  && \ 
    apt-get install -y python-software-properties  && \ 
    add-apt-repository ppa:ondrej/php -y && \
    apt-get update -y && \ 
    apt-get install -y apache2 \
    vim \
    tar \
    php7.0-fpm \
    php7.0-mcrypt \ 
    php7.0-mysql  \ 
    mysql-client \
    mysql-server   \
    php5.6 \
    php5.6-fpm \
    php5.6-mysql \
    php5.6-mcrypt && \
    apt-get install -y zsh && \ 
    apt-get install -y git  \
    && /etc/init.d/mysql start \
    && sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" \
    && mysqladmin -uroot password root  

0x1 FROM

FROM指定一个基础镜像, 一般情况下一个可用的 Dockerfile一定是 FROM 为第一个指令。

0x2 MAINTAINER

这里是用于指定镜像制作者的信息

0x3 RUN

RUN命令将在当前image中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行Dockerfile中的下一个指令。
层级 RUN 指令和生成提交是符合Docker核心理念的做法。它允许像版本控制那样,在任意一个点,对image 镜像进行定制化构建。

0x4 ENV

ENV指令可以用于为docker容器设置环境变量
ENV设置的环境变量,可以使用 docker inspect命令来查看。同时还可以使用docker run –env =来修改环境变量。

0x5 WORKDIR

WORKDIR 用来切换工作目录的。Docker 默认的工作目录是/,只有 RUN 能执行 cd 命令切换目录,而且还只作用在当下下的 RUN,也就是说每一个 RUN 都是独立进行的。如果想让其他指令在指定的目录下执行,就得靠 WORKDIR。WORKDIR 动作的目录改变是持久的,不用每个指令前都使用一次 WORKDIR。

0x6 COPY

COPY 将文件从路径<src>复制添加到容器内部路径 <dest>

<src>必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url,<dest>
是目标容器中的绝对路径。
所有的新文件和文件夹都会创建UID 和 GID 。事实上如果<src> 是一个远程文件URL,那么目标文件的权限将会是600。

0x7 ADD

ADD 将文件从路径 复制添加到容器内部路径
同COPY

0x8 EXPOSE

EXPOSE 指令指定在docker允许时指定的端口进行转发。

0x9 CMD

Dockerfile.中只能有一个CMD指令。 如果你指定了多个,那么最后个CMD指令是生效的。
CMD指令的主要作用是提供默认的执行容器。这些默认值可以包括可执行文件,也可以省略可执行文件。
当你使用shell或exec格式时, CMD
会自动执行这个命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值