1.安装与卸载(推荐使用CentOS7)
docker官网https://docs.docker.com/engine/install/centos/
RPM安装:
安装包下载地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
后面使用k8s时候,官方认证的是17.03,为了统一版本使用rpm安装方式,两个安装包相对应
docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
开始安装之前需要开启防火墙,docker需要进行一定的设置
# 更新yum
yum update # 需要时间
# 清空防火墙规则
...
# 查看防火墙规则
firewall-cmd --list-all
# 创建安装包存放路径
mkdir -p /usr/local/src/InstallPackages/Docker
# 进入到安装包存放路径下
yum -y install *
....
[root@localhost Docker]# systemctl start docker
[root@localhost Docker]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@localhost Docker]#systemctl status docker
# 配置加速器
[root@localhost Docker]# mkdir -p /etc/docker
[root@localhost Docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://vsk4inl0.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://vsk4inl0.mirror.aliyuncs.com"]
}
[root@localhost Docker]# systemctl daemon-reload
[root@localhost Docker]# systemctl restart docker
[root@localhost Docker]# ps -ef | grep docker
root 76233 1 0 17:25 ? 00:00:00 /usr/bin/dockerd
root 76238 76233 0 17:25 ? 00:00:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root 76334 75931 0 17:26 pts/3 00:00:00 grep --color=auto docker
[root@localhost Docker]#
2.常用命令
2.1 帮助命令
查看版本:docker version
显示 Docker 系统信息,包括镜像和容器数 :docker info
查看帮助:docker --help
2.2镜像命令
1. docker images [选项]
列出本地的镜像模板
-a : 列出本地的所有镜像(含中间影响层)
-q : 只显示镜像ID
--digests : 显示镜像的摘要
--no-trunc : 显示完成的镜像信息
2.docker search 镜像名 [选项]
查询指定的仓库镜像 (查询是在github’https://hub.docker.com/ '当查询,下载是在阿里云下载)
-automated : 只列出automated build 类型的镜像
-s : 列出收藏值不小于指定值的镜像 eg -> docker search -s 20 tomcat
--no-trunc : 显示完成的镜像信息 ok 的
3.docker pull 镜像名 [:TAG]
下载镜像
[:TAG] 指定标签或版本,不指定默认拉取最新的latest版本.
4.docker rmi 镜像名ID
删除镜像
-f : 强制删除
删除单个 : docker rmi -f 镜像ID:TAG
删除多个 : docker rmi -f 镜像ID1:TAG 镜像ID2:TAG]
删除全部 : docker rmi -f $(docker images -qa)
5.Docker镜像提交
docker commit -m="提交描述信息" -a="作者" 容器ID 需要创建的镜像名:[标签名]
eg:
docker commit -m="提交描述信息" -a="XuTigui" b421b52fe12f jenkins:xyit_1.0.0
# 使用dockerfile,docker文件名使用绝对路径会相对路径,新镜像名后有一个.,表示上下文
docker build -f dockerfilename -t 需要创建的镜像名:[标签名] .
6.镜像导出与导入(挂载的路径不会被打包)
# 导出指定的位置 >和-o 是一样的
docker save 镜像ID > /tmp/docker-images/镜像名.tar
eg:
## 前置条件 docker commit -m="提交描述信息" -a="XuTigui" b421b52fe12f jenkins:xyit_1.0.0
## 前置条件 mkdir /tmp/docker-images
docker save 556bd10b382c -o /tmp/docker-images/jenkins-xyit-1.0.0.tar
# 导入,-i和<是一样的
docker load < /tmp/docker-images/镜像名.tar
eg:
docker load -i /tmp/docker-images/jenkins-xyit-1.0.0.tar
# 修改进行的tag
docker tag 镜像ID 新的镜像名:[Tag]
eg:
docker tag 556bd10b382c jenkins:xyit_1.0.0
2.3容器命令
1.docker run
新建并启动容器:docker run [OPTION] IMAGE [COMMMAND][ARG]
[OPTION]
--name="容器新名字":为容器指定一个名称,未指定会随机分配
--env: 向容器中注入环境变量(-e)
--link 容器名:别名 : 容器通信
-d:后台运行容器,并返回容器id,也叫启动守护式容器
-i:以交互式模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机映射端口
-p:指定端口映射,有四种该模式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
2.docker ps
列出当前所有容器正在运行的容器
docker ps [OPION]
[OPTION]
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近创建的n个容器
-q:只显示容器编号
-no-trunc:不截断输出
3.退出容器
退出容器:
exit:容器停止退出
ctrl+P+Q:容器不停止退出
4.docker start 容器ID
启动未关闭的容器:
docker start 容器ID或容器名
5.docker restart 容器ID
重启容器:
docker restart 容器ID或容器名
6.停止容器
docker stop 容器ID或容器名 # 慢慢停止
docker kill 容器ID或容器名 # 立刻停止
7.删除容器
删除已停止的容器:
docker rm [-f] 容器ID或容器名
-f:强制删除
一次性删多个:
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs rm
8.启动守护式容器
docker run -d 镜像名
ps 中没有该容器运行
9.查看容器日志
docker logs -f -t --tail 容器ID或容器名
-t:是加入的时间戳
-f:跟随最新的日志打印
--tail 数字:显示最后多少条
10.查看容器内运行的进程
docker top 容器ID或容器名
11.查看容器内部细节
docker inspect 容器ID或容器名
json字符串
12.进入正在运行的容器并以命令行交互
dcoker exec -it 容器ID或容器名 bashShell
docker attach 容器ID或容器名
区别:
exec:是在容器中打开的新终端,并且可以启动新的进程 直接在容器外执行没用进入到容器内部
attach:直接进入容器启动命令的终端,不会启动新的进程
13.从文件内拷贝文件到主机上
docker cp 容器ID或容器名:容器内路径 目的主机路径 # 反之则反
docker cp f59bb1c0e727:/etc/apt/sources.list /usr/local/src/
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free
docker cp /usr/local/src/sources.list 36f2b4e3ae2e:/etc/apt/
3.网络
进程网络修改:
-b, --bridge 指定Docker使用的网桥设备,默认情况下Docker会自动创建和使用docker0 网桥设备,通过此参数可以使用已经存在的设备
--bip 指定Docker0 的IP 和掩码,使用标注的CIDR形式,如10.10.10.10/24
--dns 配置容器的DNS,在启动Docker进程时添加,所有容器全部生效
容器网络修改:
--net 用于指定容器的网络通讯方式
bridge:Docker默认的方式,网桥模式
none:容器没有网络栈
container:使用其他容器的网络栈,Docker容器会加入其他容器的network namespace
host:表示容器使用Host的网络,没有自己独立的网络栈.容器可以完全访问Host的网络,不安全
网络隔离:
查看当前docker可用网络: docker network ls
新建网络: docker network create app-tier --driver bridge
docker network create -d 类型 网络空间名称
查看新建的网络信息: docker network inspect app-tier
查看所有可用网桥
docker network list
删除指定网桥
docker network rm dr0
4.dockerfile
FROM:定制的镜像都是基于 FROM 的镜像
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。
RUN ["可执行文件", "参数1", "参数2"]
5.docker-compose
5.1下载安装
下载地址:https://github.com/docker/compose/releases/tag/1.26.0
mv docker-compose-Linux-x86_64 docker-compose
chmod a+x docker-compose
mv docker-compose /usr/local/bin
vim /etc/profile
#添加内容:export PATH=/usr/local/bin:$PATH
source /etc/profile
# 测试,任意目录下输入
docker-compose
5.2容器管理
5.2.1yml文件编写格式
yml文件以key:value方式来指定配置信息
多个配置信息以换行+缩进的方式来区分,严格缩进
在docker-compose.yml文件中,不要使用制表符
version: '3.1'
services:
mysql: # 服务的名称
restart: always # 代表只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.4 # 指定镜像
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射,依次可以映射多个端口
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql # 映射数据卷
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
5.2.2容器管理
在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
#1.基于docker-compose.yml启动管理的容器
docker-compose up -d
#2.关闭并删除容器
docker-compose down
#3.开启|关闭|重启已经存在的由docker-compose维护的容器
docker-compose start|stop|restart
#4.查看由docker-compose管理的容器
docker-compose ps
#5.查看日志
docker-compose logs -f
5.2.34.docker-compose配合Dockerfile使用
编写docker-compose文件
# yml文件
version: '3.1'
services:
ssm:
restart: always
build: #
context: ../ # 指定dockerfile文件的所在路径
dockerfile: Dockerfile # 指定Dockerfile文件名称
image: ssm:1.0.1
container_name: ssm
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai
编写Dockerfile文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
运行
#可以直接基于docker-compose.yml以及Dockerfile文件构建的自定义镜像
docker-compose up -d
# 如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
#重新构建自定义镜像
docker-compose build
#运行当前内容,并重新构建
docker-compose up -d --build
6.CI|CD
文件夹及文件挂载
文件夹挂载: 若文件夹不存在,则先创建出文件夹(若为多层文件夹,则递归创建) 用host上的文件夹内容覆盖container中的文件夹内容
文件挂载: docker 禁止用主机上不存在的文件挂载到container中已经存在的文件 文件挂载不会对同一文件夹下的其他文件产生任何影响
文件复制
本地复制到容器 docker cp /www/ 18b1660eb8cb:/www/
容器复制到本地 docker cp 18b1660eb8cb:/www/ /www/