我刚刚在线阅读本教程,作者在此过程中使用了以下命令:
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
答案 0 :(得分:1)
很好的问题,而且你的陈述是正确的。
命名约定如下:
容器的名称
--name my_sql
环境变量 - 您可以根据需要添加任意数量的变量,每个变量都可以添加额外的' -e'指令
-e MYSQL_ROOT_PASSWORD=mysecretpassword
使用来自不同容器的卷的指令
--volumes-from my_datastore
在后台运行
-d
您用来制作容器的Docker图像的名称
mysql
你甚至可以使用像mysql这样的东西:latest(最新版本是一个可以提取该图像最新版本的标签)。
希望有所帮助!
答案 1 :(得分:1)
有两件事让人难以理解,让我解释一下
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
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
对于其他选项,你应该没问题。如果您有任何疑问,请与我联系。