了解复杂的docker命令

时间:2015-08-30 22:17:25

标签: docker

我刚刚在线阅读本教程,作者在此过程中使用了以下命令:

  

sudo docker run --name my_sql -e MYSQL_ROOT_PASSWORD = mysecretpassword --volumes-from my_datastore -d mysql

所以我对上面命令的理解如下,给图像一个特定的名称,然后传递一个环境变量,并且在执行--volumens-from命令之后{{1} }表示容器应该在后台运行。

我不确定我的mysql到底是什么。

我的问题如下:

Docker使用以下语法:

-d

在我突出显示docker [OPTIONS] COMMAND [arg...] 什么是[OPTIONS]以及COMMAND是什么的命令中?还有什么是mysql在命令的最后做什么?

谢谢。

亚历-Z

2 个答案:

答案 0 :(得分:1)

很好的问题,而且你的陈述是正确的。

命名约定如下:

容器的名称

--name my_sql

环境变量 - 您可以根据需要添加任意数量的变量,每个变量都可以添加额外的' -e'指令

-e MYSQL_ROOT_PASSWORD=mysecretpassword 

使用来自不同容器的卷的指令

--volumes-from my_datastore 

在后台运行

-d 

您用来制作容器的Docker图像的名称

mysql 

你甚至可以使用像mysql这样的东西:latest(最新版本是一个可以提取该图像最新版本的标签)。

希望有所帮助!

答案 1 :(得分:1)

有两件事让人难以理解,让我解释一下

首先,docker image mysql里面有什么。

hub.docker.com中没有图像mysql的Dockerfile。因此,如果您不了解此图像在容器中运行的内容,则可以运行以下命令来获取详细信息

$ alias dfimage='docker run -v /var/run/docker.sock:/var/run/docker.sock --rm centurylinklabs/dockerfile-from-image'
$ dfimage mysql
ADD file:f7eb3ddd8c7f33332cd94564ec171306ffa490836953449b9b9c506085ec8745 in /
CMD ["/bin/bash"]
RUN groupadd -r mysql && useradd -r -g mysql mysql
RUN mkdir /docker-entrypoint-initdb.d
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
ENV MYSQL_MAJOR=5.6
ENV MYSQL_VERSION=5.6.26
RUN echo "deb http://repo.mysql.com/apt/debian/ wheezy mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
RUN {       echo mysql-community-server mysql-community-server/data-dir select '';      echo mysql-community-server mysql-community-server/root-pass password '';       echo mysql-community-server mysql-community-server/re-root-pass password '';        echo mysql-community-server mysql-community-server/remove-test-db select false;     } | debconf-set-selections  && apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}"* && rm -rf /var/lib/apt/lists/*     && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf   && echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf  && mv /tmp/my.cnf /etc/mysql/my.cnf
VOLUME [/var/lib/mysql]
COPY file:eebf5525e2e95ae059f8b5954a592e533f986fd2073741a1e0b7731ff2cb3860 in /entrypoint.sh
ENTRYPOINT &{["/entrypoint.sh"]}
EXPOSE 3306/tcp
CMD ["mysqld"]

因此,如果没有/entrypoint.sh mysqld选项覆盖它,它会暴露端口3306并运行默认命令--entrypoint

注意:

  • 您可以使用--entrypoint
  • 替换entrypoint命令
  • 您可以运行docker history mysql来获取类似信息,但不够好。

其次,如何理解--volumes-from

--volumes-from是另一个容器my_datastore中的卷,您应该可以使用类似的dfimage来显示其卷:

docker inspect -f {{ .Volumes }} my_datastore

使用--volumes-from,mysql容器可以访问另一个容器中的数据。

如果您想了解有关--volumes-from的更多信息,请参阅此文档Managing data in containers

对于其他选项,你应该没问题。如果您有任何疑问,请与我联系。