我正在学习Docker.很多次,我看到它Dockerfile有WORKDIR命令
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 3000
CMD [ “npm”, “start” ]
Run Code Online (Sandbox Code Playgroud)
我不能省略WORKDIR,Copy只是让我Dockerfile的项目根源?使用这种方法的缺点是什么?
根据这个github问题,应该可以用Docker 0.6或更高版本的Upstart,cron等启动一个完整的容器,但是我该怎么做?
我当时正在等待
docker run -t -i ubuntu /sbin/init
Run Code Online (Sandbox Code Playgroud)
会工作就像
lxc-start -n ubuntu /sbin/init
Run Code Online (Sandbox Code Playgroud)
我会得到一个登录屏幕,但它没有显示任何内容.我也尝试使用ssh访问它,但没有运气.我正在使用Docker索引中的默认ubuntu映像.
在过去的几个月里,我一直在使用nsenter来在容器上运行shell以进行调试.我听说并使用了版本1.3中引入的docker exec.Docker exec 似乎是为了进行调试而进入容器的新的最佳实践,但我想知道使用docker exec和nsenter是否有任何缺点.比较两者的信息很少.使用docker exec与nsenter 时,我应该注意或避免哪些具体问题?
我想用alpine和apache创建一个docker图像.我使用tini作为"init"系统.它工作,直到我分离并重新连接到容器.连接到容器后,apache退出并且容器停止.我不知道问题是什么.有没有人与docker,alpine和apache有类似的问题?
我的Dockerfile看起来像这样(之前,我使用Alpines包管理器进行tini)
FROM alpine
ENV TINI_VERSION v0.16.1
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /sbin/tini
RUN chmod +x /sbin/tini
RUN apk add --no-cache apache2 \
&& mkdir -p /run/apache2 \
&& ln -sf /dev/stdout /var/log/apache2/access.log \
&& ln -sf /dev/stderr /var/log/apache2/error.log
EXPOSE 80
ENTRYPOINT ["/sbin/tini", "-vvv", "-g", "--"]
CMD ["/usr/sbin/httpd", "-f", "/etc/apache2/httpd.conf", "-DFOREGROUND"]
Run Code Online (Sandbox Code Playgroud)
输入和输出到docker cli:
~/Desktop/docker_test@laptop-sebi
$ docker run -itd test1
a793bad5d4350f58893909f1552c9f2978d8e2952960ac667f8dcb2bf7a3516e
~/Desktop/docker_test@laptop-sebi
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
a793bad5d435 test1 "/sbin/tini -vvv -..." 12 seconds
ago …Run Code Online (Sandbox Code Playgroud) 所以在开始这个问题之前,我是对码头工作者的理解.
现在Images是创建容器的映像,Dockerfile就像流程一样.简单来说,图像是类,容器是图像的对象.
现在,我不想采用Dockerfile您在创建容器时指定要执行的步骤的方法.
我想通过Linux安装一些基本实体,如MongoDb,Redis等,并在我们的服务器上运行.
所以我开始这样:
我从Docker Hub下载了Ubuntu映像,通过docker pull ubuntu
它返回了我18261df960118..7a16(big hex key)
现在我必须为这个图像创建一个容器,以实现我所做的:
docker create -h abc.com --name abc.com 18261df960118..7a16
它返回了我的容器ID.
docker start containerId遵循的docker attach containerId.但每次它说:
您无法附加到已停止的容器,请先启动它.
请帮助我做错的地方,对于很多人来说这可能是一个新手的问题,但是我被困在这里,请不要为此做出请求.
提前致谢.