索引
- 零、概述
- 一、Docker安装
- 1.ubuntu下安装
- 2.centos下安装
- 二、常用命令
- 镜像命令
- 容器命令
- 其它常用命令
- 镜像的提交
- 三、镜像讲解
- 四、容器数据卷
- 五、Dockerfile
- 六、Docker网络
- 七、Docker部署示例
- 1.安装mysql8
- 2.安装nginx
零、概述
一、Docker安装
1.ubuntu下安装
2.centos下安装
二、常用命令
镜像命令
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]
三、镜像讲解
四、容器数据卷
使用 -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 | 容器启动时候执行的命令 |
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