文章目录
1. Docker简介
沙箱
:隔离/安全
Docker
:开源应用容器引擎,使用go语言,遵顼Apache 2.0协议
容器
:使用沙箱机制,相互之间不提供任何接口,且开窍极低
Docker容器优势
:启动快,占用资源少
镜像
:通过镜像创建容器,类似操作系统镜像
仓库
:镜像的集中存放地
2. 安装 Docker
2.1 安装仓库
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
# 安装相关系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 更新yum缓存
sudo yum makecache fast
2.2 安装Docker引擎
2.2.1 安装最新版本
# 默认安装最新社区版的Docker引擎和容器
sudo yum install docker-ce docker-ce-cli containerd.io
2.2.2 安装特定版本
# 列出并排序您存储库中可用的版本(按版本号从高到低排序)
yum list docker-ce --showduplicates | sort -r
# 安装特定版本
sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
3. docker管理
# 查看docker引擎状态
systemctl status docker
# 停止docker引擎
systemctl stop docker
# 启动docker引擎
systemctl start docker
备注:必须才docker引擎运行的状态下才可以进行容器和镜像管理
4. 镜像管理
# 镜像搜索
docker search image_name
# 搜索官方镜像
docker search --filter "is-official=true" image_name
# 是否自动化构建
docker search --filter "is-automated=true" image_name
# 大于多少颗星
docker search --filter stars=3 image_name
# 下载镜像
docker pull image_name
eg:docker pull centos:version
# 镜像查看
docker images
# 具体镜像查看
docker images image_name
# 镜像删除
docker rmi image_name
# 制作镜像
docker commit -a "author" -m "message" container_name/container_id new_image_name:tag_name
-a:指定镜像作者
-m:提交信息
container_name/container_id:待制作镜像的容器
new_image_name:新镜像名称
tag_name:镜像标签,如latest
5. 容器管理
5.1 基础
# 创建容器
docker run -itd --name=container_name image_name
-i:表以交互式模式运行
-d:表后台运行,并返回容器id
-t:为容器分配一个伪输入终端
--name:为容器指定名称
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 查看最近一次创建的容器
docker ps -l
# 启动容器
docker start container_name/container_id
# 停止容器
docker stop container_name/container_id
# 重启容器
docker restart container_name/container_id
# 删除容器
docker rm container_name/container_id
# 进入容器
docker exec -it container_name/container_id /bin/bash
# 退出容器
exit
5.2 进阶
端口映射
docker run -itd --name=container_name -p 宿主机端口号:容器端口号 image_name
eg:docker run -itd --name=nginx -p 8888:80 nginx
文件挂载
docker run -itd --name=container_name -p 宿主机端口号:容器端口号 -v 宿主机/文件目录:容器名/文件目录 image_name
eg:docker run -itd --name=nginx -p 8888:80 -v /usr/local/zy/web01.html:/usr/share/nginx/html/index.html nginx
注:docker中的root只是相当于普通用户
Docker宿主机文件修改但容器内未修改解决办法:1、重启;2、http://ju.outofmemory.cn/entry/289286
文件复制
# 容器-->宿主机
docker cp 容器名:目录/文件(夹) 宿主机目录/文件(夹)
# 宿主机-->容器
docker cp :宿主机目录/文件(夹) 容器名:目录/文件(夹)
容器互联
- Docker中一个容器一般
仅运行一个服务
,当某个服务需要更新时,替换其中的容器即可。 - 容器间一般采用容器互联机制:容器互联大体有以下
三种方式
,使用link进行容器互联:1、基于volume的互联;2、基于link的互联;3、基于网络的互联。使用–link参数让容器间进行交互:
- 首先创建数据库容器:
[root@centos7 ~]# docker run -d --name mysqldb -p3306:3306 -e MYSQL_ROOT_PASSWORD=fanshine mysql/mysql-server- 然后创建web容器,并将其连接到db容器:
[root@centos7 ~]# docker run -d -p 80:80 --name nginxweb --link mysqldb:mysqldb nginx/nginx-server
此时web容器与db容器建立了互联关系。- 注意:–link参数格式为–link name:alias,其中name是要链接的容器名称,alias是这个连接的名称。
5. 安装mysql
# 拉取镜像
docker pull mysql
# 创建挂在目录
mkdir -p /var/cnmp/
# 创建容器
cd /var/cnmp/
docker run -itd -p 3306:3306 --name mysql -v $pwd/mysql/conf:/etc/mysql/conf.d -v $pwd/mysql/logs:/var/logs -v $pwd/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true mysql
# 进入容器
docker exec -it mysql /bin/bash
# 进入数据库
mysql -uroot -p123456
# 使用数据库
show databases;
create database db01;
use db01;
create table t_book(id int not null primary key, bookName varchar(20));
insert into t_book values(1, 'java');
select * from t_book;
# mysql8 连接
use mysql;
select user,host from user;
##更改加密方式
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
##更改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
##刷新权限`
FLUSH PRIVILEGES;
6. 阿里云安装jenkins
# 拉取官方镜像
docker pull jenkins
# 运行docker-jenkins
docker run -itd --name=jenkins -p 8080:8080 jenkins
# 开放阿里云端口
登陆---控制台---云服务ESC---实例id---本实例安全组---配置规则---添加安全组规则
# 密码存放位置
docker exec -it jenkins /bin/bash
# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword