#1.卸载原有docker
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
#2.使用阿里云加速
yum-config-manager
--add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4.安装docker引擎 docker-ce社区版 docker-cc企业版 yum install docker-ce docker-ce-cli containerd.io
#5.启动docker systemctl start docker
#6.查看docker版本信息 docker version
#7.hello-world docker run hello-world
#8.查看下载好的hello-world镜像 docker images
#9.卸载docker yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker rm -rf /var/lib/containerd2.配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ht4un1iv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.docker run 执行流程
4.docker底层原理
5.docker为什么比vm快?
1.docker有着比vm更少的抽象层。
2.docker使用的是宿主机的内核,vm需要Guest OS
Docker常用命令 帮助命令docker version #docker版本命令 docker info #现实docker详细信息 系统信息 镜像和容器的数量 docker 命令 --help #万能命令 docker的帮助命令列表
官方命令文档地址:https://docs.docker.com/engine/reference/commandline/docker/
镜像命令 docker images 列出镜像[root@i-jdglwroj /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 5 months ago 13.3kB #解释 REPOSITORY #镜像的仓库源 TAG #镜像的标签 IMAGE ID #镜像的ID CREATED #镜像的创建时间 SIZE #镜像的大小 #可选项 -a, --all #显示所有镜像 -f, --filter -q, --quiet #只显示IDdocker search 搜索镜像
[root@i-jdglwroj /]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 12215 [OK] mariadb MariaDB Server is a high performing open sou… 4689 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 907 [OK] #可选项 --filter=STARS=3000 #过滤STARS大于3000的镜像 [root@i-jdglwroj /]# docker search mysql --filter=STARS=3000 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 12215 [OK] mariadb MariaDB Server is a high performing open sou… 4689 [OK]docker pull 拉取/下载镜像
[root@i-jdglwroj /]# docker pull mysql Using default tag: latest #不加 tag 默认是latest latest: Pulling from library/mysql 72a69066d2fe: Pull complete #分层下载 联合文件系统 **核心 93619dbc5b36: Pull complete 99da31dd6142: Pull complete 626033c43d70: Pull complete 37d5d7efb64e: Pull complete ac563158d721: Pull complete d2ba16033dad: Pull complete 688ba7d5c01a: Pull complete 00e060b6d11d: Pull complete 1c04857f594f: Pull complete 4d7cfa90e6ea: Pull complete e0431212d27d: Pull complete Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest #镜像的真实地址 #等价 docker pull mysql docker pull docker.io/library/mysql:latest #指定版本下载 [root@i-jdglwroj /]# docker pull mysql:5.7 5.7: Pulling from library/mysql 72a69066d2fe: Already exists #联合文件系统 93619dbc5b36: Already exists 99da31dd6142: Already exists 626033c43d70: Already exists 37d5d7efb64e: Already exists ac563158d721: Already exists d2ba16033dad: Already exists 0ceb82207cd7: Pull complete 37f2405cae96: Extracting [===========> ] 25.07MB/108.6MB e2482e017e53: Download complete 70deed891d42: Download completedocker rmi 删除镜像
#删除指定镜像 [root@i-jdglwroj /]# docker rmi -f mysql:5.7 Untagged: mysql:5.7 Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94 Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76 Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989 Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150 Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92 #删除所有镜像 [root@i-jdglwroj /]# docker rmi -f $(docker images -aq) #删除多个镜像 [root@i-jdglwroj /]# docker rmi -f容器命令
说明:有了镜像才能创建容器,linux下创建一个linux容器,以centos为例。
docker pull centos新建容器并运行
docker run [可选参数] image #参数说明 --name='name1' 容器名字,mysql1、mysql2 用来区分容器 -d 后台运行 -it 使用交互方式运行,查看容器内容 -p 指定容器端口 -p:8080:8080 #四种方式 -p ip:主机端口:容器端口 -p 主机端口:容器端口 -p 容器端口 容器端口 -P(大写) 随机指定端口 #启动并进入容器 [root@i-jdglwroj /]# docker run -it centos /bin/bash [root@7adc6a6e7394 /]# #查看容器内部的centos [root@7adc6a6e7394 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var #列出所有运行的容器 [root@i-jdglwroj /]# docker ps 列出所有运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@i-jdglwroj /]# docker ps -a 列出所有运行过的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7adc6a6e7394 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago laughing_keldysh 72e86329e42e feb5d9fea6a5 "/hello" 4 hours ago Exited (0) 4 hours ago pedantic_hofstadter [root@i-jdglwroj /]# docker ps -a -n=1 列出最近运行/创建的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7adc6a6e7394 centos "/bin/bash" 3 minutes ago Exited (0) 2 minutes ago laughing_keldysh [root@i-jdglwroj /]# docker ps -aq 列出所有容器的id 7adc6a6e7394 72e86329e42e #容器推出 exit #退出并停止容器 Ctrl+p+q #推出但不停止容器删除容器
docker rm 容器id #删除指定容器,不能删除正在运行的容器 docker rm -f 容器id #强制删除 [root@i-jdglwroj /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c3711e75491a centos "/bin/bash" 2 minutes ago Up 2 minutes cranky_faraday [root@i-jdglwroj /]# docker rm c3711e75491a Error response from daemon: You cannot remove a running container c3711e75491a47f304928a1cacdb5b852ef7a57680b6eb62db3e90cc07917a0b. Stop the container before attempting removal or force remove docker rm $(docker ps -aq) #递归删除所有容器 docker rm -f $(docker ps -aq) #强制递归删除所有容器 docker ps -aq|xargs docker rm docker ps -aq|xargs docker rm -f启动和停止容器的操作
docker start 容器id #启动容器 docker restart 容器id #重启容器 docker stop 容器id #停止容器 docker kill 容器id #强制停止容器常用其他命令
后台启动命令
docker run -d 镜像id [root@i-jdglwroj ~]# docker run -d centos f2b8548de4958dfed3a61c3c04be2253af5628bf67893fe6813cbf9f3b942281 [root@i-jdglwroj ~]# docker ps #发现容器停止了,必须要有一个前台进程,docker发现没有就停止 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #容器启动后,docker发现没有提供服务,就会自动停止。
查看日志
docker logs --help docker logs -f -t --tail 容器 #自己写一个shell [root@i-jdglwroj ~]# docker run -d centos /bin/sh -c 'while true;do echo yuhang;sleep 1;done' 1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17 [root@i-jdglwroj ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cc8d946f665 centos "/bin/sh -c 'while t…" 2 seconds ago Up 1 second sleepy_haslett -ft #format,显示日志 --tail 条数 #显示日志的条数 [root@i-jdglwroj ~]# docker logs -f -t --tail 10 1cc8d946f665 2022-03-07T02:39:18.210756727Z yuhang 2022-03-07T02:39:19.212859777Z yuhang 2022-03-07T02:39:20.215114243Z yuhang 2022-03-07T02:39:21.217281674Z yuhang [root@i-jdglwroj ~]# docker logs -ft 1cc8d946f665 2022-03-07T02:37:32.978537482Z yuhang 2022-03-07T02:37:33.980579961Z yuhang 2022-03-07T02:37:34.982709737Z yuhang 2022-03-07T02:37:35.984936355Z yuhang 2022-03-07T02:37:36.987063211Z yuhang 2022-03-07T02:37:37.989179209Z yuhang 2022-03-07T02:37:38.991326669Z yuhang 2022-03-07T02:37:39.993444339Z yuhang查看容器中进程信息
docker top 容器id [root@i-jdglwroj ~]# docker top 1cc8d946f665 UID PID PPID C STIME TTY TIME CMD root 28513 28494 0 10:37 ? 00:00:00 /bin/sh -c while true;do echo yuhang;sleep 1;done root 29307 28513 0 10:44 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1查看容器中源数据
docker inspect 容器id
[root@i-jdglwroj ~]# docker inspect 1cc8d946f665
[
{
"Id": "1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17",
"Created": "2022-03-07T02:37:32.682440423Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo yuhang;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 28513,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-03-07T02:37:32.98048525Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/hostname",
"HostsPath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/hosts",
"LogPath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17-json.log",
"Name": "/sleepy_haslett",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d-init/diff:/var/lib/docker/overlay2/dd9fd4a5cb20ac52d8c7795219b220e5e18f5c1da5b5c69b0abdd868d3f1aa10/diff",
"MergedDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d/merged",
"UpperDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d/diff",
"WorkDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "1cc8d946f665",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"while true;do echo yuhang;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "b5f9b000afcd745a5ac8c7d469784bc9c4addc59fc59b4b6f7a6df6ff01e1da0",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/b5f9b000afcd",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "de32a76226846fe75820d9ba3a53d1e71bec8d0fd0b5ae0fd2705c8d00775970",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "325ec8758c2439d94f97a6d7b679ec69f02a31444be1a203dbb05c3dd91b6403",
"EndpointID": "de32a76226846fe75820d9ba3a53d1e71bec8d0fd0b5ae0fd2705c8d00775970",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
进入当前运行的容器
docker exec -it 容器id /bin/bash [root@i-jdglwroj ~]# docker exec -it 1cc8d946f665 /bin/bash 进入容器并开启一个终端 [root@1cc8d946f665 /]# exit docker attach 容器id [root@i-jdglwroj ~]# docker attach 1cc8d946f665 进入容器当前执行的终端 yuhang yuhang拷贝容器内部的文件到host主机
docker cp 容器id:文件地址 目标本地地址 [root@i-jdglwroj home]# docker cp af8c3213c885:/home/yuhang.test /home练习
docker安装nginx
docker search nginx docker pull nginx #下载nginx镜像 [root@i-jdglwroj home]# docker run -d --name='nginx1' -p 3344:80 nginx 5812f00054b73562ca5b364885f9c7791936fd0cb2e3d230fd87f6ea84bc738f [root@i-jdglwroj home]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5812f00054b7 nginx "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx1 [root@i-jdglwroj home]# curl localhost:3344外网访问 端口暴露的概念Welcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
#查看nginx信息 root@5812f00054b7:/etc# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@5812f00054b7:/etc# cd /etc/nginx/ root@5812f00054b7:/etc/nginx# ls conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
docker 安装tomcat
docker run -it --rm tomcat:9.0 #官方方式 用完即删 docker pull tomcat #下载最新版 docker run -d -p 3355:8080 --name tom1 tomcat #问题 1、linux命令少了 2、没有webapps 阿里云默认最小的镜像 不必要的都删了 #保证最小的体积 docker exec -it tom1 /bin/bash cp webapps.dist/* webapps #拷贝webapps.dist/*数据到默认webapps
测试访问:3355*
部署es+kibana
elasticsearch 非常耗内存 #需要4g内存
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch #限制内存
#查看docker cpu状态
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
[root@i-jdglwroj ~]# curl localhost:9200
{
"name" : "uyS9KAa",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "kZx9XT0PSd68GtX6i5Om8g",
"version" : {
"number" : "5.6.12",
"build_hash" : "cfe3d9f",
"build_date" : "2018-09-10T20:12:43.732Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
ES+Kibana网络原理
可视化portainer
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
测试访问
主页
Rancher(CI/CD)
镜像讲解 镜像是什么?UnionFS(联合文件系统)
Docker镜像加载原理
镜像分层
commit镜像
docker commit 提交容器成为一个新的副本 # 命令和git原理类似 docker commit -m="提交的描述信息" -a="作者" 容器id 新镜像名:[TAG] #测试 1、run 一个tomcat容器 自己修改默认配置 2、通过commit命令构建一个修改好的镜像 [root@i-jdglwroj ~]# docker commit -a="yuhang" -m="add app config" 4a54cf558d24 tomcat02 sha256:f8ac4bf61917ba42fc9a1ca847a2f9259cae7f7221ecd7c5d49c6393bb1d368d [root@i-jdglwroj ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat02 latest f8ac4bf61917 2 seconds ago 684MB nginx latest 605c77e624dd 2 months ago 141MB tomcat latest fb5657adc892 2 months ago 680MB centos latest 5d0da3dc9764 5 months ago 231MB portainer/portainer latest 580c0e4e98b0 11 months ago 79.1MB elasticsearch latest 5acf0e8da90b 3 years ago 486MB以上是入门 容器数据卷 什么是容器数据卷
需求:数据持久化、同步
#mysql可以存储在本地
使用数据卷#使用命令来挂载 -v
docker run -it -v 主机目录:容器内部
[root@i-jdglwroj ~]# docker run -it -v /home/ceshi:/home/ centos /bin/bash
#测试挂载是否成功
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",#主机地址
"Destination": "/home",#容器内地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
#继承挂载
docker run -it --name docker02 --volumes-from docker01 镜像名:tag
#即使一个容器被删除 另一个容器里面挂载过的数据还在
结论
容器配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
但是一旦持久化到本地,是不会被删除的。
测试
实战:安装mysql
docker pull mysql
[root@i-jdglwroj ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Downloading [=====================================> ] 20.1MB/27.15MB
93619dbc5b36: Download complete
99da31dd6142: Download complete
626033c43d70: Download complete
37d5d7efb64e: Download complete
ac563158d721: Download complete
d2ba16033dad: Download complete
688ba7d5c01a: Download complete
00e060b6d11d: Downloading [=====> ] 11.55MB/105.2MB
1c04857f594f: Download complete
4d7cfa90e6ea: Download complete
e0431212d27d: Download complete
#启动mysql
docker run -d -p 3310:3306 --name mysql01 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yuhang0829 mysql
#测试外网连接成功
#AllowPublicKeyRetrieval设置为true
#完全删除容器
docker rm -f mysql01
#数据还存在
[root@i-jdglwroj ~]# cd /home/mysql/
[root@i-jdglwroj mysql]# cd data/
[root@i-jdglwroj data]# ls
auto.cnf binlog.000003 binlog.000006 ca.pem #ib_16384_0.dblwr ibdata1 ibtmp1 mysql.ibd public_key.pem Students undo_002
binlog.000001 binlog.000004 binlog.index client-cert.pem #ib_16384_1.dblwr ib_logfile0 #innodb_temp performance_schema server-cert.pem sys
binlog.000002 binlog.000005 ca-key.pem client-key.pem ib_buffer_pool ib_logfile1 mysql private_key.pem server-key.pem undo_001
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的volume情况
[root@i-jdglwroj data]# docker volume ls
DRIVER VOLUME NAME
local 6a7efd6481a52c8d38f677e5e48b537a5698d0781027bb38d1259935386f4a43
#因为只写了容器内的路径
#具名挂载
-v 卷名:容器内路径
docker run -d -P --name nginx01 -v juming-volume:/etc/nginx nginx
[root@i-jdglwroj data]# docker volume ls
DRIVER VOLUME NAME
local juming-volume
[root@i-jdglwroj data]# docker volume inspect juming-volume
[
{
"CreatedAt": "2022-03-09T00:24:11+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-volume/_data",
"Name": "juming-volume",
"Options": null,
"Scope": "local"
}
]
拓展
# 通过 -v 容器内路径:ro/rw 改变读写权限 ro readonly #只读 rw readwrite#可读可写 #一旦设置了容器权限,容器对挂载出来的内容就有了限定 #ro权限只能通过宿主机来读写,容器内部不能操作初识dockerfile
dockerfile是用来构建镜像的文件!命令脚本!
镜像是一层一层的,这个脚本就是一块一块的!
#创建一个dockerfile文件 #文件中内容 FROM centos VOLUME ["volume01","volume02"] CMD echo "----end----" CMD /bin/bash #构建一个image [root@i-jdglwroj build-images]# docker build -f dockerfile01 -t yuhang/centos . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos ---> 5d0da3dc9764 Step 2/4 : VOLUME ["volume01","volume02"] ---> Running in 9e58600b94c5 Removing intermediate container 9e58600b94c5 ---> a808511041c3 Step 3/4 : CMD echo "----end----" ---> Running in 1b401c59f87e Removing intermediate container 1b401c59f87e ---> 2b95752306c4 Step 4/4 : CMD /bin/bash ---> Running in 8d7ea12bfd6e Removing intermediate container 8d7ea12bfd6e ---> 8a554f0179aa Successfully built 8a554f0179aa Successfully tagged yuhang/centos:latest #查看是否build成功 [root@i-jdglwroj build-images]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE yuhang/centos latest 8a554f0179aa 48 seconds ago 231MB #run起来 [root@i-jdglwroj ~]# docker run -it --name centos01 yuhang/centos [root@ee3c197e03bd /]# [root@ee3c197e03bd /]# [root@i-jdglwroj ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ee3c197e03bd yuhang/centos "/bin/sh -c /bin/bash" 8 seconds ago Up 8 seconds centos01Dockerfile
dockerfile是用来构建docker镜像的文件,命令参数脚本。
步骤:
1、构建一个dockerfile文件。
2、docker build 构建成为镜像。
3、docker run 运行我们的镜像容器。
4、docker commit 提交我们的镜像。
5、docker push 上传/发布我们的镜像。
Dockerfile的构建过程基础知识:
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像,并提交!
dockerfile是面向开发的,以后发布项目,做镜像,就需要编写dockerfile。
Dockerfile的指令以前我们使用别人的镜像,现在练习自己构建镜像。
FROM #基础镜像 centos MAINTAINER #镜像维护者信息/构建者 姓名+邮箱 RUN #docker镜像构建时候需要运行的命令 ADD #tomcat的镜像,这个tomcat的压缩包,就是添加内容。 WORKDIR #当前这个镜像起来之后的工作目录 VOLUME #挂载的目录 EXPOSE #暴露端口配置 CMD #指定这个容器启动时候要运行的命令 CMD echo,只有最后一个会生效,可被替代。 ENTRYPOINT #指定这个容器启动时候要运行的命令可以追加命令 ONBUILD #当构建一个被继承 DOckerfile 这个时候就会运行 ONBUILD的指令。 COPY #类似ADD,将我们的文件 拷贝到镜像中 ENV #构建的时候设置环境变量实战测试
Docker Hub 中 99%的镜像都是从基础镜像过来的 FROM scratch,然后配置需要的软件和配置进行构建。
自己构建一个:
#1.编写Dockerfile FROM centos MAINTAINER yuhang发现我们的镜像构建成功了!!!ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "------end------" CMD /bin/bash #2.使用这个文件构建镜像 docker build -f dockerfile01 -t 镜像名:[tag] . Successfully built 98922b593d9b Successfully tagged yuhang-centos:1.0
docker history 镜像名 #查看我们的镜像的历史信息CMD和ENTRYPOINT的区别
CMD #指定这个容器启动时候要运行的命令 CMD echo,只有最后一个会生效,可被替代。 ENTRYPOINT #指定这个容器启动时候要运行的命令可以追加命令
测试CMD
touch dockerfile-cmdtest vim dockerfile-cmdtest FROM centos:7 CMD ["ls","-a"] #因为CMD命令是替换的 所以 -l并不是一个完整的命令 [root@i-jdglwroj build-images]# docker run -it cmdtest -l docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown. #必须要加一个完整的命令 [root@i-jdglwroj build-images]# docker run -it cmdtest ls anaconda-post.log dev home lib64 mnt proc run srv tmp var bin etc lib media opt root sbin sys usr
测试entrypoint
[root@i-jdglwroj build-images]# touch dockerfile-entrypoint [root@i-jdglwroj build-images]# vim dockerfile-entrypoint FROM centos:7 ENTRYPOINT ["ls","-a"] [root@i-jdglwroj build-images]# docker build -f dockerfile-entrypoint -t entrypoint . [root@i-jdglwroj build-images]# docker run -it entrypoint . .dockerenv bin etc lib media opt root sbin sys usr .. anaconda-post.log dev home lib64 mnt proc run srv tmp var [root@i-jdglwroj build-images]# docker run -it entrypoint -l total 12 drwxr-xr-x 1 root root 6 Mar 10 03:15 . drwxr-xr-x 1 root root 6 Mar 10 03:15 .. -rwxr-xr-x 1 root root 0 Mar 10 03:15 .dockerenv -rw-r--r-- 1 root root 12114 Nov 13 2020 anaconda-post.log lrwxrwxrwx 1 root root 7 Nov 13 2020 bin -> usr/bin drwxr-xr-x 5 root root 360 Mar 10 03:15 dev drwxr-xr-x 1 root root 66 Mar 10 03:15 etc drwxr-xr-x 2 root root 6 Apr 11 2018 home lrwxrwxrwx 1 root root 7 Nov 13 2020 lib -> usr/lib lrwxrwxrwx 1 root root 9 Nov 13 2020 lib64 -> usr/lib64 drwxr-xr-x 2 root root 6 Apr 11 2018 media drwxr-xr-x 2 root root 6 Apr 11 2018 mnt drwxr-xr-x 2 root root 6 Apr 11 2018 opt dr-xr-xr-x 107 root root 0 Mar 10 03:15 proc dr-xr-x--- 2 root root 114 Nov 13 2020 root drwxr-xr-x 11 root root 148 Nov 13 2020 run写一个centos 集成tomcat docker网络原理
docker中所有的网络接口都是虚拟的,虚拟的转发效率很高。
–link 自定义网络自己创建一个网络 driver-bridge subnet-192.168.0.0 gateway-192.168.0.1 [root@i-jdglwroj ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet



