为了运行ASP.NET Core应用程序,我生成了一个dockerfile,它构建应用程序并在容器中复制源代码,Git使用Jenkins获取该代码.所以在我的工作区中,我在dockerfile中执行以下操作:
WORKDIR /app
COPY src src
Run Code Online (Sandbox Code Playgroud)
虽然Jenkins使用Git正确更新主机上的文件,但Docker不会将此应用于我的图像.
我建立的基本脚本:
#!/bin/bash
imageName=xx:my-image
containerName=my-container
docker build -t $imageName -f Dockerfile .
containerRunning=$(docker inspect --format="{{ .State.Running }}" $containerName 2> /dev/null)
if [ "$containerRunning" == "true" ]; then
docker stop $containerName
docker start $containerName
else
docker run -d -p 5000:5000 --name $containerName $imageName
fi
Run Code Online (Sandbox Code Playgroud)
我尝试不同的东西像--rm
和--no-cache
参数docker run
,并停止/删除容器之前,新的一个是建立.我不确定我在这里做错了什么.似乎docker正在更新图像,因为调用COPY src src
会导致图层ID并且没有缓存调用:
Step 6 : COPY src src
---> 382ef210d8fd
Run Code Online (Sandbox Code Playgroud)
更新容器的推荐方法是什么?
我的典型场景是:应用程序在Docker容器中的服务器上运行.现在部分应用程序已更新,例如通过修改文件.现在容器应该运行新版本.Docker似乎建议构建一个新的映像而不是修改现有的容器,所以我认为像我这样重建的一般方法是正确的,但实现中的一些细节必须得到改进.
我是码头工人的新手。我被分配了一个使用 Docker 容器进行开发的任务。我按照在 Windows 10 上安装 Docker 和容器的教程进行操作,但出现以下错误:network remaxmdcrm_remaxmd-network declared as external, but could not be found
到目前为止我已经完成的步骤是:
docker-compose build -d -t docker-compose.yml
- docker-compose.yml 是根目录中的文件。docker-compose up
。当我运行此命令时,出现我在开头指定的错误。network remaxmdcrm_remaxmd-network declared as external, but could not be found
docker-compose.yml
services:
ui:
build:
context: .
dockerfile: Dockerfile.development
volumes:
- .:/app
ports:
- "5000:5000"
restart: unless-stopped
networks:
- remaxmdcrm_remaxmd-network
redis:
image: 'redis:alpine'
networks:
- remaxmdcrm_remaxmd-network
networks:
remaxmdcrm_remaxmd-network:
external: …
Run Code Online (Sandbox Code Playgroud) 当我尝试
apt-get install -y tzdata
Run Code Online (Sandbox Code Playgroud)
显示选择时区的命令行选项.我试图在脚本中使用它来进行一些设置,如何在没有用户输入的情况下运行apt-get?
我知道要重新配置我能做的tzdata
echo "America/New_York" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
Run Code Online (Sandbox Code Playgroud)
但是在安装时我需要它完全运行,即使它没有设置正确的时区,我总是可以重新配置它.
我试过了
echo 5 | apt-get install -y tzdata
Run Code Online (Sandbox Code Playgroud)
但它没有按预期工作.
我想在Dockerfile中编写以下RUN命令.但是,docker并没有保留新的线条.
RUN echo "[repo] \
name = YUM Repository \
baseurl = https://example.com/packages/ \
enabled = 1 \
gpgcheck = 0" > /etc/yum.repos.d/Repo.repoxyz
Run Code Online (Sandbox Code Playgroud)
我知道\
在每一行的末尾都会逃脱新行.但是,有什么方法可以写多行来保留新行吗?
我是码头工人的新手.我发现我们可以使用Dockerfile中的ENV指令设置环境变量.但是如何在Dockerfile中为长命令设置bash别名呢?
我们什么时候使用docker service create
命令,什么时候使用docker run
命令?
我的印象是环境变量可以在一行上设置如下,以便最小化中间图像.
FROM alpine:3.6
ENV RUBY_MAJOR 2.4 \
RUBY_VERSION 2.4.1 \
RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
RUBYGEMS_VERSION 2.6.12 \
BUNDLER_VERSION 1.15.3
Run Code Online (Sandbox Code Playgroud)
但是,运行基于此代码段的容器并调用# set |grep RU
我看到变量不是单独分配的,而是组合成一个字符串.
RUBY_MAJOR='2.4 RUBY_VERSION 2.4.1 RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 RUBYGEMS_VERSION 2.6.12 BUNDLER_VERSION 1.15.3'
Run Code Online (Sandbox Code Playgroud)
但是,如果我显式设置每个变量如下,我得到预期的输出,并且在调用变量时没有错误.
ENV RUBY_MAJOR 2.4
ENV RUBY_VERSION 2.4.1
ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
ENV RUBYGEMS_VERSION 2.6.12
ENV BUNDLER_VERSION 1.15.3
Run Code Online (Sandbox Code Playgroud)
问题:是否可以将环境变量的设置组合在一条线上?如果是这样,我该怎么做?这是一个好习惯吗?
我需要在docker镜像中为/etc/sysctl.conf添加几行.是否有一种幂等方式通过dockerfile执行此操作,而不是手动编辑并使用docker commit方法?
我们经常做的一件事是在Dockerfile
构建Docker镜像时打包所有源代码.
ADD . /app
Run Code Online (Sandbox Code Playgroud)
我们怎样才能避免.git
以简单的方式包含目录?
我试过用Unix来处理这个问题的方法 ADD [^.]* /app/
完整样本:
docker@boot2docker:/mnt/sda1/tmp/abc$ find . . ./c ./.git ./Dockerfile ./good ./good/a1 docker@boot2docker:/mnt/sda1/tmp/abc$ cat Dockerfile FROM ubuntu ADD [^.]* /app/ docker@boot2docker:/mnt/sda1/tmp/abc$ docker build -t abc . Sending build context to Docker daemon 4.096 kB Sending build context to Docker daemon Step 0 : FROM ubuntu ---> 04c5d3b7b065 Step 1 : ADD [^.]* /app/ d ---> 5d67603f108b Removing intermediate container 60159dee6ac8 Successfully built 5d67603f108b docker@boot2docker:/mnt/sda1/tmp/abc$ docker run -it abc root@1b1705dd66a2:/# …
docker-compose build
和之间有什么区别docker build
?
假设在一个dockerized项目路径中有一个docker-compose.yml
文件:
docker-compose build
Run Code Online (Sandbox Code Playgroud)
和
docker build
Run Code Online (Sandbox Code Playgroud) dockerfile ×10
docker ×9
bash ×2
alias ×1
apt-get ×1
asp.net-core ×1
git ×1
jenkins ×1
ubuntu ×1
unix ×1