需求描述
为了使得安装的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

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

被折叠的 条评论
为什么被折叠?



