使用docker 部署latex

本文档介绍了如何使用Docker实现LaTeX环境的隔离,确保不影响系统稳定性。通过下载Ubuntu 18.04镜像,启动容器并安装LaTeX,包括安装中文语言包。接着,展示了如何制作Docker镜像,以及将主机目录挂载到容器中进行编译。最后,解释了如何启动、停止Docker容器,并能在主机上查看编译结果。

需求描述

为了使得安装的latex不影响系统的稳定性,同时兼顾学习docker的目的,本次环境构建需要满足需求如下:

1、docker进行latex环境隔离

2、latex的数据文件全部在host上进行编辑,可以利用host提供的ide环境

3、挂载host目录给docker进行进行编译

 

实施步骤一:下载docker镜像

jeffray@jeffray:~$ sudo docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
c64513b74145: Pull complete 
01b8b12bad90: Pull complete 
c5d85cf7a05f: Pull complete 
b6b268720157: Pull complete 
e12192999ff1: Pull complete 
Digest: sha256:3f119dc0737f57f704ebecac8a6d8477b0f6ca1ca0332c7ee1395ed2c6a82be7
Status: Downloaded newer image for ubuntu:18.04

查看下载的镜像

jeffray@jeffray:~$ sudo docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               735f80812f90        7 days ago          83.5MB
ubuntu              16.04               e13f3d529b1a        2 weeks ago         115MB
hello-world         latest              e38bc07ac18e        3 months ago        1.85kB

实施步骤二:启动docker镜像,安装latex

1、启动Ubuntu 1804的容器

jeffray@jeffray:~$ sudo docker run -it --rm ubuntu:18.04 bash

root@56a374364516:/# cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted

-i, --interactive                    Keep STDIN open even if not attached

-t, --tty                            Allocate a pseudo-TTY

--rm                             Automatically remove the container when it exits


2、安装latex

apt update

如果图省事则可以直接安装texlive-full,否则只安装最基本的,后面根据需要再增加

sudo apt-get install   
texlive texlive-science

安装完成后进行初步的验证,创建test.tex

\documentclass{article}
\begin{document}
Hello world \LaTeX
\end{document}

编辑完成后执行 pdflatex进行编译,生成test.pdf标示编译成功

root@56a374364516:~# pdflatex test.tex 

This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 7 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) (./test.aux)
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./test.aux) )</usr/shar
e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on test.pdf (1 page, 10551 bytes).
Transcript written on test.log.
root@56a374364516:~# ls
test.aux  test.log  test.pdf  test.tex

 PS为了让latex支持中文,需要安装中文语言包latex-cjk-chinese

\documentclass{article}  
\usepackage{CJK}       
\begin{document} 
    \begin{CJK*}{UTF8}{gkai} 
     测试中文显示
    \end{CJK*}     
\end{document}

这样重新编译就可以显示中文了,系统支持哪些字体可以通过dpkg来查看

root@56a374364516:~# dpkg -l | grep latex
ii  latex-cjk-chinese                 4.8.4+git20170127-2          amd64        Chinese module of LaTeX CJK
ii  latex-cjk-chinese-arphic-bkai00mp 1.23                         all          AR PL KaitiM Big5 fonts for CJK
ii  latex-cjk-chinese-arphic-bsmi00lp 1.23                         all          AR PL Mingti2L Big5 fonts for CJK
ii  latex-cjk-chinese-arphic-gbsn00lp 1.23                         all          AR PL SungtiL GB fonts for CJK
ii  latex-cjk-chinese-arphic-gkai00mp 1.23                         all          AR PL KaitiM GB fonts for CJK
ii  latex-cjk-common                  4.8.4+git20170127-2          amd64        LaTeX macro package for CJK (Chinese/Japanese/Korean)

 

3、制作latex的docker镜像

制作方法有两种

(1)基于container制作image

exit 退出伪终端后

docker container ls -a

docker commit container-name image-name

docker image ls

(2)基于dockerfile制作image

创建Dockefile,进行编辑(注意apt install 后面必须加-y,否则会由于交互退出)

FROM ubuntu:18.04
  
MAINTAINER jeffray zhang

RUN apt update

RUN apt install -y vim

RUN apt install -y texlive texlive-science latex-cjk-chinese

保存后执行命令生成新image

$ sudo docker build -t jeffray/latex .

运行成功后查看image (jeffray/latex即为创建的成功镜像)

jeffray@jeffray:~/docker-containers/latex$ sudo docker image list
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
jeffray/latex       latest              9919eb9d6f5b        About a minute ago   842MB
ubuntu              18.04               735f80812f90        7 days ago           83.5MB
ubuntu              16.04               e13f3d529b1a        2 weeks ago          115MB
hello-world         latest              e38bc07ac18e        3 months ago         1.85kB

实施步骤三:Host目录编写tex文件,docker环境编译

1、创建docker容器,将host上的 /home/jeffray/latex-workspace 路径挂载到容器的 /workspace 目录下,均采用绝对路径

docker run -it -v /home/jeffray/latex-workspace:/latex jeffray/latex /bin/bash

2、在host上创建测试文件test.tex(/home/jeffray/latex-workspace/test/test.tex)

jeffray@jeffray:~/latex-workspace/test$ cat test.tex 
\documentclass{article}  
\usepackage{CJK}       
\begin{document} 
    \begin{CJK*}{UTF8}{gkai} 
     测试中文显示
    \end{CJK*}     
\end{document}

3、在容器中进行编译

root@036de22e92c0:/# ls
bin  boot  dev  etc  home  latex  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@036de22e92c0:/# cd /latex/
root@036de22e92c0:/latex# ls
run-docker-container-latex.sh  test
root@036de22e92c0:/latex# cd test/
root@036de22e92c0:/latex/test# ls
test.tex
root@036de22e92c0:/latex/test# pdflatex test.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 7 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texmf/tex/latex/CJK/CJK.sty
(/usr/share/texmf/tex/latex/CJK/mule/MULEenc.sty)
(/usr/share/texmf/tex/latex/CJK/CJK.enc))
No file test.aux.
(/usr/share/texmf/tex/latex/CJK/UTF8/UTF8.bdg)
(/usr/share/texmf/tex/latex/CJK/UTF8/UTF8.enc)
(/usr/share/texmf/tex/latex/CJK/UTF8/UTF8.chr)
(/usr/share/texmf/tex/latex/CJK/UTF8/c70gkai.fd)
(/usr/share/texmf/tex/latex/CJK/UTF8/c70gkai.fdx) [1{/var/lib/texmf/fonts/map/p
dftex/updmap/pdftex.map}] (./test.aux) )</usr/share/texlive/texmf-dist/fonts/ty
pe1/public/amsfonts/cm/cmr10.pfb></usr/share/texmf/fonts/type1/arphic/gkaiu/gka
iu4e.pfb></usr/share/texmf/fonts/type1/arphic/gkaiu/gkaiu65.pfb></usr/share/tex
mf/fonts/type1/arphic/gkaiu/gkaiu66.pfb></usr/share/texmf/fonts/type1/arphic/gk
aiu/gkaiu6d.pfb></usr/share/texmf/fonts/type1/arphic/gkaiu/gkaiu79.pfb></usr/sh
are/texmf/fonts/type1/arphic/gkaiu/gkaiu8b.pfb>
Output written on test.pdf (1 page, 22155 bytes).
Transcript written on test.log.
root@036de22e92c0:/latex/test# ls
test.aux  test.log  test.pdf  test.tex
root@036de22e92c0:/latex/test# 

 4  在host上可以直接用pdf软件打开test.pdf

大功告成 OK

docker容器的start stop

区别rm容器,我们可以stop一个容器,容器stop后,可以通过start命令启动,启动后再可以通过docker exec container-ID exec进入交互终端,详细流程如下:

jeffray@jeffray:~/latex-workspace$ sudo docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
036de22e92c0        jeffray/latex       "/bin/bash"         12 minutes ago      Exited (0) 23 seconds ago                       pensive_villani
jeffray@jeffray:~/latex-workspace$ ls
run-docker-container-latex.sh  test
jeffray@jeffray:~/latex-workspace$ sudo start  036de22e92c0
sudo: start:找不到命令
jeffray@jeffray:~/latex-workspace$ sudo docker start  036de22e92c0
036de22e92c0
jeffray@jeffray:~/latex-workspace$ sudo docker exec -it 036de22e92c0 bash
root@036de22e92c0:/# ls
bin   dev  home   lib    media  opt   root  sbin  sys  usr
boot  etc  latex  lib64  mnt    proc  run   srv   tmp  var
root@036de22e92c0:/# cd latex/
root@036de22e92c0:/latex# ls
run-docker-container-latex.sh  test

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值