索引

  • 零、概述
  • 一、Docker安装
  • 1.ubuntu下安装
  • 2.centos下安装
  • 二、常用命令
  • 镜像命令
  • 容器命令
  • 其它常用命令
  • 镜像的提交
  • 三、镜像讲解
  • 四、容器数据卷
  • 五、Dockerfile
  • 六、Docker网络
  • 七、Docker部署示例
  • 1.安装mysql8
  • 2.安装nginx


零、概述

容器化部署 java 容器化部署流程_部署

一、Docker安装

1.ubuntu下安装

ubuntu安装docker环境

2.centos下安装

centos安装docker环境

二、常用命令

镜像命令

docker images 镜像名					#查看当前所有镜像
docker search 镜像名					#搜索镜像
docker pull	镜像名						#下载镜像
docker rmi -f 镜像id					#删除指定镜像
docker rmi -f $(docker images -aq)   #删除所有镜像

容器命令

docker run [可选参数] image
#参数说明
	--name="Name" 容器名字
	-d	后台方----式运行
	-it	交互运行,进入查看内容
	-p	指定容器端口 -p 8080:8080
		-p	主机端口:容器端口(常用)
	-P	随机指定端口
例:docker run -it centos /bin/bash

docker ps    	#列出正在运行的容器
docker ps -a	#包含曾经运行的

exit	#容器停止并退出
Ctrl+P+Q #容器退出不停止

docker rm -f 容器id				#删除指定容器
docker rm -f $(docker ps -aq)	 #删除所有的容器
docker ps -a -q|xargs docker rm  # 删除所有容器

#容器的运行,重启,停止,杀死
docker run 容器id
docker restart容器id
docker stop 容器id
docker kill 容器id

其它常用命令

docker top 容器id		#查看容器内部的进程
docker inspect 容器id	#查看容器的元数据

#进入正在运行的容器
docker exec -it 容器id bashShell	#打开一个新的终端
docker attach 容器id				#打开原来正在运行的终端

#从容器拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径

镜像的提交

commit 镜像

docker commit -m="提交的消息" -a="作者" 容器id 目标镜像名称:[tag]

三、镜像讲解

容器化部署 java 容器化部署流程_容器化部署 java_02

四、容器数据卷

使用 -v 命令挂载数据卷

docker run -it -v 主机目录:容器内目录

-v 内的路径中有 ro rw**

#例如: /etc/nginx:ro  #表示只读,只能通过宿主机来修改,容器内部无法操作
#例如: /etc/nginx:rw  #表示可读可写,均可操作

#使用 -e 命令进行环境配置

#使用 --name 配置容器的名字

查看所有 卷volume 的情况

docker volume ls

卷的共享(1继承或者共享2的数据),实现容器的数据共享
容器名1 – volumes-from 容器名2
容器数据卷的生命周期是,只要有人使用它,就不会消失

五、Dockerfile

1.编写dockerfile文件

Dockerfile关键字

关键字

作用

FROM

指定基础镜像

MAINTAINER

作者的信息

RUN

执行什么命令

EXPOSE

容器对外暴露的端口

WORKDIR

进入到容器后进入到哪个目录

ENV

配置环境变量

ADD

将文件拷贝到镜像中并解压

COPY

将文件拷贝到镜像中

VOLUME

配置数据卷

CMD

容器启动时候执行的命令

ENTRYPOINT

容器启动时候执行的命令

容器化部署 java 容器化部署流程_容器化部署 java_03

2.docker build构建镜像

docker build -t lk666 .

3.docker run 运行镜像

docker run -d -p --name lk lk666

4.docker push 发布镜像


#############docker hub提交###################################
docker login -u linking0606
docker push 镜像名称

六、Docker网络

查看所有的网络

docker network ls

默认使用桥接模式

docker run -d -p tomcat01  tomcat
docker run -d -p tomcat01 --net bridge tomcat

docker0 默认,域名不能访问,–link可以打通

自定义网络 mynet

--driver birdge 		桥接网络
--subnet 192.168.0.0/16	网络ip段255*255个
--gateway 192.168.0.1	网管

命令:

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

使用自己的网络

docker run -d -p tomcat01 --net mynet tomcat

网络互连

tomcat01在网络docker01中;tomcat-net-01在mynet中

将mynet与Tomcat01连通

docker network connect mynet tomcat01

docker exec -it tomcat01 ping tomcat-net-01

七、Docker部署示例

1.安装mysql8

下载最新的mysql镜像,默认为mysql8

docker pull mysql

创建相应目录和文件,用于容器与宿主机数据同步

mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/log
mkdir -p /mydata/mysql/conf

vim /mydata/mysql/conf/my.cnf

写入my.cnf中的内容如下

# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

default_authentication_plugin= mysql_native_password

后台运行mysql8,并挂载数据卷,下面指定了root用户的密码为123456

docker run \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -v /mydata/mysql/data:/var/lib/mysql:rw \
    -v /mydata/mysql/log:/var/log/mysql:rw \
    -v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf:rw \
    -v /etc/localtime:/etc/localtime:ro \
    --name mysql8 \
    --restart=always \
    -d mysql

进入容器内部

docker exec -it mysql8 /bin/sh

mysql -uroot -p

配置root用户,密码123456,可从任意ip远程连接此数据库

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

2.安装nginx

下载nginx1.10的docker镜像:

docker pull nginx:1.10

从容器中拷贝nginx配置
先运行一次容器(为了拷贝配置文件):

docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-d nginx:1.10

将容器内的配置文件拷贝到指定目录:

docker container cp nginx:/etc/nginx /mydata/nginx/

修改文件名称:

mv /mydata/nginx/nginx /mydata/nginx/conf

终止并删除容器:

docker stop nginx
docker rm nginx

使用docker命令启动:

docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10