在目前的项目部署运维中,使用Docker容器的越来越多。Docker也为我们提供了几种创建容器的方式,主要是dockerrun命令、Dockerfile和docker-compose三种方式,一种比另一种方便。下面看一下几种方法的具体用法。本文需要先安装docker和docker-compose。安装不懂的可以看我另外两篇文章centos7安装dockerdocker-compose安装,可以很方便的安装。以创建Nginx容器为例。方法一:dockerrun命令方法dockerrun--namesome-nginx-p1080:80-v/some/content:/usr/share/nginx/html-dnginx参数说明:--name:定义容器名称。-p:宿主机与容器之间的端口挂载,格式:宿主机端口:容器内部端口-v:宿主机目录与容器目录的映射,格式:宿主机目录:容器内部目录-d:后台执行以上命令即可。这里将容器命名为some-nginx,将容器的80端口映射到宿主机的1080端口,将容器中的/usr/share/nginx/html目录映射到宿主机的/some/content目录。使用的是nginx的最新镜像,镜像部分也可以写成“nginx:version”如“nginx:1.15.1”。在/some/content中创建一个index.html并输入任何内容。访问ip+1080可以看到请求到了nginx。接入nginx测试dockerrun方法,在运行简单容器时更方便。方法二:Dockerfile配置文件构建镜像方法1.新建一个文件,命名为Dockerfile,输入如下内容。FROMnginxCOPYhtml/usr/share/nginx/htmlFROMnginx代表基于nginx镜像构建我们的镜像。注意需要先在Dockerfile同级目录下创建html目录,否则会报错。Dockerfile中可以自定义镜像的内容,可以使用的指令有很多。例如,您可以在创建配置容器后运行shell脚本。你可以自己查一下。本文只是一个简单的入门使用示例。注意:每次执行Dockerfile的指令,都会在docker上新建一层,所以尽量不要写太多层。2.在Dockerfile所在目录运行命令创建镜像dockerbuild-tmy-nginx-image。请注意,末尾有一个点。3、运行容器dockerrun--namesome-nginx-p1080:80-dmy-nginx-image在html目录下新建index.html文件,输入任意内容。访问ip+1080可以看到请求到了nginx。访问nginx测试Dockerfile一般用于自定义镜像,因为是文件,比命令方式更容易保存和分享给团队。方法三:需要管理多个容器时,docker-compose方法不适用于以上两种方法。它不仅需要管理各个容器的配置信息,还要处理容器之间的关系。这时候就需要docker-compose了。做容器整理。1、创建docker-compose.yml文件,输入如下版本:"3"services:nginx:image:nginxcontainer_name:some-nginxports:-"1080:80"volumes:-/some/content:/usr/share/nginx/html在/some/content中创建一个index.html,输入任意内容,稍后访问测试。2、执行启动命令docker-composeup-d访问ip+1080可以看到请求到了nginx。接入测试docker-compose.yml文件中可以写入多个容器配置信息,为容器编排提供各种配置项。比如我有一个springboot项目,需要打包成jar包,然后创建一个容器运行。它需要连接一个数据库容器,最后需要一个nginx容器作为请求代理。那么docker-compose.yml文件可以这样写。版本:“3”服务:mysql:图像:mysql:5.7.26端口:-“13306:3306”重新启动:“始终”container_name:mysql命令:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collat??ion-server=utf8mb4_unicode_ci--max_connections=1000--default-storage-engine=INNODB--lower_case_table_names=1--default-time_zone='+8:00'--sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"privileged:trueenvironment:-MYSQL_ROOT_PASSWORD=123456-TZ="Asia/Shanghai"volumes:-/opt/docker/mysql/conf:/etc/mysql/mysql.conf.d-/etc/localtime:/etc/localtime-/opt/docker/mysql/logs:/var/log/mysql-/opt/docker/mysql/data:/var/lib/mysqlmy-server:image:java:8restart:"always"container_name:my-serverenvironment:-TZ="Asia/Shanghai"volumes:-/opt/my-serve/my-serve-0.0.1-SNAPSHOT.jar:/data/my-serve-0.0.1-SNAPSHOT.jar-/etc/当地时间:/etc/localtime-/opt/var/logs:/var/logsentrypoint:java-jar/data/my-serve-0.0.1-SNAPSHOT.jar--server.port=18081nginx:image:nginxcontainer_name:nginxvolumes:-/opt/my-serve:/home/nginx-/opt/docker/nginx/conf.d/:/etc/nginx/conf.d/-/opt/docker/nginx/log/:/var/log/nginx/-/opt/docker/nginx/html/:/usr/share/nginx/html/restart:"always"network_mode:"host"执行docker-composeup-d命令即可启动配置文件中的所有容器来吧,是不是很方便?在实际项目中,一般用得比较多的是Dockerfile和docker-compose,但是现在Kubernetes越来越流行,未来Kubernetes是否会占据市场也不一定。好了,这次就到此为止。希望对你有帮助。
