Docker安装
Centos安装Docker
卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
下载安装包
sudo yum install -y yum-utils
设置镜像仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
安装docker
yum install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
查看是否安装成功
docker version
阿里云镜像加速
登录阿里云,找到容器镜像服务
选择镜像加速
注:每个人的加速地址不一样,要用自己的,命令都在命令行输入
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pxgsgv9d.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
测试docker
docker run hello-world
Docker卸载
卸载软件包
yum remove docker-ce docker-ce-cli containerd.io
卸载主机镜像,容器…
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Docker使用
版本信息
docker version
帮助信息
docker --help
镜像操作
搜索镜像
docker search [镜像名]
--filter=STARS=3000 搜索出来的镜像就是STARS大于3000的
登录网站查找镜像Tags
有代理
https://registry.hub.docker.com/
无代理
阿里云—>容器镜像服务
按照提示操作即可
下载镜像
docker pull [镜像名]:[Tags]
查看已下载镜像q
docker images
-a 列出所有镜像
-q 只显示镜像id
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 3 weeks ago 13.3kB
仓库源 标签 ID 创建时间 大小
删除镜像
docker rmi -f [镜像名]:[Tags]
docker rmi -f [id]
docker rmi $(docker images -aq)
容器操作
容器信息
docker info
创建容器
docker run -it --name [dockername] --hostname [hostname] [镜像文件] /bin/bash
cocker run -d --name [dockername] --hostname [hostname] [镜像文件]
docker run -dit --name [dockername] --hostname [hostname] [镜像文件] /bin/bash
-it 在运行的bash中输入输出
--name 指定容器名
-d 后台运行
-p 指定端口
IP:主机端口:容器端口
主机端口:容器端口
容器端口
/bin/bash 运行镜像中的/bin/bash
查看容器
docker ps 查看正在运行的程序
dokcer ps -a 查看所有容器
启动容器
docker start [容器名]
docker restart [容器名]
停止容器
docker stop [容器名]
挂起容器
docker pause [容器名] 挂起
docker unpause [容器名] 解除挂起
连接正在运行的容器
docker exec -it [容器名/id] /bin/bash 进入容器开启新终端
docker attach [容器名/id] 进入容器当前正在运行的进程
终止容器
exit 退出并终止容器
ctrl+p,ctrl+q 只退出不终止
docker kill [容器id] 关闭容器
删除容器
docker rm [容器id]
docker rm -f $(docker -aq)
查看日志
docker logs -tf --tail [数量] [容器名/id]
查看容器内进程
docker top [容器名/id]
查看容器内部信息
docker inspect [容器名/id]
拷贝文件
docker cp [容器id]:[文件路径] [主机路径]
导出容器
docker save -o [].tar [容器名]
docker export [容器名] > [].tar
导入镜像
从tar文件创建镜像
docker load < [].tar
将本地镜像创建为容器
cat [].tar | docker import - [容器名]
将当前目录镜像创建为容器
tar -c . | docker import - [容器名]
查看内存
docker stats
部署容器
Nginx
搜索nginx
docker search nginx
下载nginx
docker pull nginx
创建容器
docker run -d --name nginx01 -p [外部端口]:[容器端口]
测试
curl localhost:[外部端口]
Tomcat
搜索Tomcat
docker search tomcat
下载nginx
docker pull tomcat
创建容器
docker run -d --name tomcat01 -p [外部端口]:[容器端口]
进入容器
docker exec -it tomcat01 /bin/bash
设置webapps应用
cp -r webapps.dist/* webapps
ES+Kibana
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms 64m-Xmx512m" elasticsearch
Centos靶场
安装镜像
docker pull centos:7
创建容器
docker run -dit --name range --hostname range -p 8080:80 -p 3366:3306 --privileged=true centos /sbin/init
进入容器
docker exec -it range /bin/bash
查看网卡信息
ip addr
关闭防火墙
systemctl stop firewalld
搭建apache
下载httpd
yum -y install httpd
本地测试
curl localhost:8080
配置文件
cd /etc/httpd/conf->vim httpd.conf | vim /etc/httpd/conf/httpd,conf
serverroot "/etc/httpd" #存放配置文件的目录
Listen 80 #Apache服务监听端口
User apache #子进程的用户
Group apache #子进程的组
ServerAdmin root@localhost #设置管理员邮件地址
DocumentRoot "/var/www/html" #网站家目录
#设置 DocumentRoot指定目录的属性
<Directory "/var/www/htm1"> #网站容器开始标识
Options Indexes FollowSymLinks #找不到主页时,以目录的方式呈现,并允许链接到网站根目录以外
AllowOverride None #none不使用. htaccess控制,a11允许
Require all granted #granted表示运行所有访问, denied表示拒绝所有访问
</Directory> #容器结束
DirectoryIndex index.html #定义主页文件,当访问到网站目录时如果有定义的主页文件,网站会自动访问。
AddDefaultcharset UTF-8 #字符编码,如果中文的话,有可能需要改为gb2312或者gbk,因你的网站文件的默认编码而异
搭建MySQL
下载服务端
yum install -y mysql-server
启动Mysql
systemctl start mysqld
进入mysql
mysql
生成镜像
docker commit
- 将容器提交为一个新的副本,相当于虚拟机镜像
- 启动一个默认的 tomcat
- 发现这个默认的 tomcat是没有 webapps应用,镜像的原因,官方的镜像默认 webapps下面是没有文件的!
- 我自己拷贝进去了基本的文件
生成镜像
docker commit -m="描述信息" -a="作者" [容器id] [镜像名]:[tag]
容器数据卷
- 容器持久化和同步,容器间数据共享
- 双向同步
同步
同步操作
docker run -it -v [同步主机路径]:[容器操作路经] [镜像] /bin/bash
docker run -it --name centos01 -v /home/centos/:/home centos:7 /bin/bash
查看配置
"Mounts": [
{
"Type": "bind",
"Source": "/home/centos",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
部署MySQL
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysq01 mysql
挂载
具名挂载
docker run -d -P --name nginx01 -v test-nginx:/etc/nginx nginx
-v [卷名]:[容器内路径]
- 查看volume的情况
docker volume ls
查看卷路径
docker volume inspect [挂载名]
默认挂载路径
/var/lib/docker/volume/
匿名挂载
- -v只写了容器内的路径,没有写容器外的路径,这种就是匿名挂载
docker run -d -P --name nginx01 -v /ect/nginx nginx
-v [容器内路径]
- 查看volume的情况
docker volume ls
数据卷容器
- 实现容器间数据共享
生成镜像
vim dockerfile
FROM centos
VOLUME ["volume01",volume02"]
CMD echo "----end----"
CMD /bin/bash
启动容器
docker run -it --name docker01 docker1/centos:1.1
启动子容器
docker run -it --name docker02 --volume-from dokcer01 docker1/centos:1.1
DokcerFile
指令
FROM----------基础镜镜像,一切从这里开始构建MAINTAINER----镜像是谁写的,姓名+邮箱RUN-----------镜像构建的时候需要运行的命令 步骤: tomcat镜像,这个 tomcat压缩包!添加内容WORKDIR-------镜像的工作目录VOLUME--------挂载的目录 #保留端口配置CMD-----------指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代ENTRYPOINT----指定这个容器启动的时候要运行的命令,可以追加命令ONBUILD-------当构建一个被继承 Dockerfile这个时候就会运行 ONBUILD的指令。触发指令COPY----------类似ADD,将我们文件拷贝到镜像中ENV-----------构建的时候设置环境变量
制作镜像
编写DockerFile文件
vim Dockerfile FROM MAINTAINER stars<123@163.com> ENV MYPATH /usr/loacl WORKDIR $MYPATH RUN yum install vim EXPOSE 80 CMD /bin/bash
- 生成镜像
docker build -f [文件名] -t [镜像名][版本] .docker build -f Dockerfile -t mycentos:1.1
查看镜像生成过程
docker history [镜像名]
实例演示
制作Tomcat镜像
FROM centosMAINTAINER stars<123@163.com>COPY readme.txt /usr/local/readme.txtADD jdk-8ull-Iinux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.22.tar.gz /usr/local/RUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_11ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/ib/tools.jarENV CATALINA_HOME /usr /local/apache-tomcat-9.0.22ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22ENV PATH SPATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /url/local/apache-tomcat9.0.22/bin/logs/catalina.out
发布镜像
注册账号
https://registry.hub.docker.com/
登录
docker login -u [用户名]docker loguot 退出登录
加标签
docker tag [镜像名/id] [镜像名]:[版本]
发布
docker push [镜像]:[版本]
发布到阿里云
-
创建名空间
-
创建镜像仓库
-
点击容器
…
Docker网络
帮助
docker network --help
查看网络
docker network ls
查看网络详细信息
docker network inspect [网卡名]
docker0
ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:75:be:7d:36 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0虚拟设备通过docker0实现互通,相当于路由器
容器内网络地址
docker exec -it tomcat01 ip addr
veth-pair
虚拟设备接口,充当桥梁,连接虚拟网络设备
link
启动时连通
docker run -d -p --name tomcat02 --link tomcat01 tomcat
通过容器名连通
docker exec -it tomcat01 ping tomcat02
查看配置
docker exec -it tomcat01 cat /etc/host
自定义网络
定义网络
docker network create --driver bridge --submit 192.168.0.0/16 --gateway 192.168.0.1 mynet
查看配置
docker network inspect mynet
使用定义网络
docker run -d -P --name tomcat01 --net mynet tomcat
网络连通
连接容器到网络
docker netowrk connect mynet tomcat01