docker run :创建一个新的容器并运行一个命令

语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS说明:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷

docker安装mysql

docker run -d \
-p 3306:3306 \
--name mysql5.7 \
--restart=always \
-v $PWD/conf/mysql:/etc/mysql/conf.d \
-v $PWD/logs/mysql:/logs \
-v $PWD/data/mysql:/mysql_data \
-e MYSQL_ROOT_PASSWORD=123456 \
 mysql:5.7

–restart=always 随docker启动

docker安装mongodb

docker run -d \ 
--name mongo3.4 \ 
--restart=always \
-p 27017:27017 \
-v $PWD/data/mongodb:/data/db \
-v $PWD/conf/mongodb:/data/configdb \
 mongo:3.4 \
 --auth

–auth表示连接mongodb需要授权 不需要的直接去掉即可

docker安装redis

docker run -d \
--name redis \
-p 6379:6379 \
--restart=always \
-v $PWD/conf/redis.conf:/etc/redis/redis.conf \
-v $PWD/data/redis:/data \
redis \
redis-server /etc/redis/redis.conf \
--appendonly yes

redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件
–appendonly yes 开启redis 持久化 产生的数据 对应这里-v $PWD/data/redis:/data 不需要的直接去掉即可

docker安装nginx

docker run -d \
--name nginx \
-p 80:80 \
--restart=always \
-v $PWD/conf/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf/nginx/conf.d:/etc/nginx/conf.d \
-v $PWD/log/nginx:/var/log/nginx \
-v $PWD/www:/home/nginx/www \
nginx

docker安装es

docker run -d \
-p 9200:9200 -p 9300:9300 \
--restart=always \
--name elasticsearch \
-v $PWD/data/es:/usr/share/elasticsearch/data \
-v /etc/localtime:/etc/localtime:ro \
docker.elastic.co/elasticsearch/elasticsearch:6.8.14
elasticsearch:7.2.0

挂着目录有权限冲突 需要先启动无挂载的容器 然后复制挂载内容到宿主机 再加上挂载即可正常启动
-v $PWD/conf/elasticsearch:/usr/share/elasticsearch/config
docker cp elasticsearch:/usr/share/elasticsearch/config ./

相关问题

1、docker容器启动后马上退出

一个简单的Dockerfile,目的是运行一个ubuntu容器,安装一些要用到的包

FROM tensorflow/tensorflow:2.2.0-py3

RUN add-apt-repository -y ppa:jonathonf/ffmpeg-4 \
 && apt-get update -qq -y \
 && apt-get install -y libsm6 libxrender1 libxext-dev python3-tk ffmpeg git \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

COPY _requirements_base.txt /opt/
    
docker build -t test:1 .
docker run -d --name test test:1

容器启动后马上退出原因分析:
Docker容器后台运行,就必须有一个前台进程。主线程结束,容器会退出。
docker run -d --name test test:1 改成 docker run -dit --name test test:1 就行了。

2、docker build最后的点号"."是什么意思
docker build -t test:1 .

Docker 在运行时分为 Docker引擎(服务端守护进程) 以及 客户端工具,各种 docker 命令,其实就是在使用客户端工具与 Docker 引擎 进行交互。

构建镜像时其实是在 Docker引擎 中完成的,而不是在本机环境。

这里就有了一个 镜像构建上下文 的概念,当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎就能使用这些文件。
比如 COPY _requirements_base.txt /opt/,其实拷贝的并不是本机目录下的 _requirements_base.txt文件,而是打包给 docker引擎 的文件,如果拷贝的文件超出了构建上下文的范围,Docker引擎是找不到那些文件的。

3、docker启动elasticsearch异常java.nio.file.NoSuchFileException

docker启动后一直处于Restarting
docker logs -f elasticsearch 查看日志显示错误信息
Exception in thread “main” java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options

原因总结:

配置了config目录的挂载数据卷,而启动时宿主机的挂载数据文件夹中并没有jvm.options文件,因此出现该文件找不到的情况。

解决办法:

先将挂载数据卷配置注释,启动elasticsearch后将elasticsearch容器中的config/文件夹下的文件拷出到宿主机

docker cp elasticsearch:/usr/share/elasticsearch/config ./

加上挂载 重新启动即可。