一、docker安装======
1.1、官网
https://docs.docker.com/engine/install/
1.2、如果有旧版本(卸载docker)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.3 、安装基本的环境
sudo yum install -y yum-utils
1.4、设置镜像仓库
默认是国外的
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
使用阿里国内源安装docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.5、安装docker
更新索引
yum makecache fast
docker-ce 社区版 docker-ee 企业版 推荐社区版
sudo yum install docker-ce docker-ce-cli containerd.io
1.6、启动docker
sudo systemctl start docker
1.7、使用docker version 是否安装成功
1.8、运行示例
sudo docker run hello-world
1.9、查看docker hello-world镜像
1.10、卸载docker
//删除依赖
$ sudo yum remove docker-ce docker-ce-cli containerd.io
//删除资源
$ sudo rm -rf /var/lib/docker //docker的默认工作路径
$ sudo rm -rf /var/lib/containerd
二、阿里云加速======
2.1、找到容器服务
2.2、找到镜像加速器
2.3、配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://tx12d179.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、研究HelloWorld怎么执行======
3.1、执行过程如下
docker run
-> docker在本机寻找镜像(有:使用本机,没有:去docker hub 下载->(判读是否找到镜像)->有就下载,没有下载失败)
3.2、底层原理
docker 是一个client-server 结构系统,docker的守护进程运行在主机上,通过socket从客户端访问
dockerServer 接受客户端docker-client的指令,就是运行命令
四、docker常用命令操作======
4.1、帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 万能命令
4.2、帮助文档
官方网址:https://docs.docker.com/reference/
4.3、镜像命令
4.3.1、docker images (查看本机的所有镜像)
查看本机的所有镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
REPOSITORY //仓库的仓库源 下载和运行皆可用
TAG //镜像的标签,版本
IMAGE ID //镜像的ID
CREATED //镜像的创建时间
SIZE //镜像的大小
[root@localhost /]# docker images --help
可选项
-a, --all # 列出所有镜像
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet # 只显示镜像的ID
4.3.2、docker search (搜索镜像)
官方网址:https://hub.docker.com/
[root@localhost /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11185 [OK]
mariadb MariaDB Server is a high performing open sou… 4246 [OK]
[root@localhost /]# docker search --help
可选项
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
docker search --filter=STARS=3000
搜索的是STARS 3000以上的结果
[root@localhost /]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11185 [OK]
mariadb MariaDB Server is a high performing open sou… 4246 [OK]
4.3.3、docker pull (下载镜像)
下载镜像 docker pull 镜像名[:tag(版本)]
默认版本下载
[root@localhost /]# docker pull mysql
Using default tag: latest ##如果不写tag 默认是latest
latest: Pulling from library/mysql
33847f680f63: Pull complete # 分层下载,docker image 的核心,联合文件系统
5cb67864e624: Pull complete
1a2b594783f5: Pull complete
b30e406dd925: Pull complete
48901e306e4c: Pull complete
603d2b7147fd: Pull complete
802aa684c1c4: Pull complete
715d3c143a06: Pull complete
6978e1b7a511: Pull complete
f0d78b0ac1be: Pull complete
35a94d251ed1: Pull complete
36f75719b1a9: Pull complete
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd
#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
指定版本下载
[root@localhost /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
33847f680f63: Already exists #已经下载过的不会再下载,联合文件系统的作用
5cb67864e624: Already exists
1a2b594783f5: Already exists
b30e406dd925: Already exists
48901e306e4c: Already exists
603d2b7147fd: Already exists
802aa684c1c4: Already exists
5b5a19178915: Pull complete
f9ce7411c6e4: Pull complete
f51f6977d9b2: Pull complete
aeb6b16ce012: Pull complete
Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
4.3.4、docker rmi -f 一般是放(ID)(删除镜像)
4.3.4.1、单个删除 docker rmi -f ****
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 8cf625070931 6 days ago 448MB
mysql latest c60d96bd2b77 6 days ago 514MB
hello-world latest d1165f221234 4 months ago 13.3kB
[root@localhost /]# docker rmi if 8cf625070931
Untagged: mysql:5.7
Untagged: mysql@sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596
Deleted: sha256:8cf6250709314f2fcd2669e8643f5d3bdebfe715bddb63990c8c96e5d261d6fc
Deleted: sha256:452fe6896278c26338d547f8d1092011d923785247c46629b374d3477fe28c84
Deleted: sha256:bd40bf60af5d06e6b93eaf5a648393d97f70998faa3bfa1b85af55b5a270cb35
Deleted: sha256:c43e9e7d1e833650e0ed54be969d6410efa4e7fa6e27a236a44a2b97e412ee93
Deleted: sha256:70f18560bbf492ddb2eadbc511c58c4d01e51e8f5af237e3dbb319632f16335b
Error: No such image: if
4.3.4.2、删除全部 docker rmi if $(docker images -aq)
传入所有参数
[root@localhost /]# docker rmi if $(docker images -aq)
Untagged: mysql:latest
Untagged: mysql@sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd
Deleted: sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707
Deleted: sha256:5c8c91273faab368a6d659156f2569fa9f40b0e0139222fdf9eef073df4b3797
Deleted: sha256:33d8196a776f42a16f10395b66f10f91443b1fb194bca2a9b8dfb0deff5babb8
Deleted: sha256:3ec63323025213e3cabf17ac7933506dc5520ec49226a9764418f77ea60d35c8
Deleted: sha256:1f129b005b51b049ac84ed0775b82096d480b7d9308a9a137697f37346562266
Deleted: sha256:80ed209bd0434faa1ce31fbaab8508124dddf8f6502c5736ee4b8e46697a8477
Deleted: sha256:e53f0d35c77064014a5c1c1332d84d5f421a58418ca9c208bc470691c0e483e3
Deleted: sha256:75209fb28131d5537e73406ff0f6f508f3eb1f4d86c43d1d16df76fd28b9cc35
Deleted: sha256:34a01bee1a62a01034ffc3da48a3cb45716a0cf2e264c26663e02288e81c7ec2
Deleted: sha256:9f8bca37a56017fd3462d4fc329b0b20f97c2dd4c15e55a8e6ad1c023ab5552b
Deleted: sha256:c8a6e3f9a2412c28cd8c48e2c7bed5e7fbaa0ab6649add2dbe8641cb29b967f6
Deleted: sha256:0a26eacdbd862e75d064d817e8a5bcf5e060c2680c10f77ffa52757c0b8c3328
Deleted: sha256:814bff7343242acfd20a2c841e041dd57c50f0cf844d4abd2329f78b992197f4
Error: No such image: if
Error response from daemon: conflict: unable to delete d1165f221234 (must be forced) - image is being used by stopped container a94dc46269f9
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
4.3.4.3、运行中的无法删除,需要停止
4、删除命令整合
[root@localhost /]# docker rmi if 镜像id 指定镜像ID
[root@localhost /]# docker rmi if 镜像id 镜像id 镜像id 镜像id 删除多个镜像
[root@localhost /]# docker rmi if $(docker images -aq) 删除全部镜像
4.4、容器命令
说明:有了镜像才可以创建容器,linux 下载一个centos 镜像进行学习
4.4.1、下载镜像(docker pull ***)
docker pull centos
4.4.2、新建容器并启动(docker run ***)
命令示范:docker run -it centos /bin/bash
docker run [可选参数] image
参数说明
--name="Name" 容器名字
-d 后台方式运行
-it 使用交互方式运行(-i -t),进入容器内容
-p (小p)指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用的)
-p 容器端口
-P (大p)随机指定端口
测试,启动并进入容器
[root@localhost /]# docker run -it centos /bin/bash
[root@d6c1042e0fca /]# ls -a #查看容器内的centos,基础版本 很多命令不完善
. .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@d6c1042e0fca /]# exit #退出容器
4.4.3、列出所有的容器(docker ps ***)
命令示范:docker ps -a
docker ps 命令
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q # 只显示容器的编号
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c1042e0fca centos "/bin/bash" 3 minutes ago Exited (0) 57 seconds ago boring_khayyam
a94dc46269f9 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago tender_brahmagupta
[root@localhost /]# docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c1042e0fca centos "/bin/bash" 6 minutes ago Exited (0) 4 minutes ago boring_khayyam
[root@localhost /]# docker ps -a -q
d6c1042e0fca
a94dc46269f9
4.4.4、退出容器 exit
exit #直接容器停止并退出
键盘:ctrl + p + q # 容器不停止退出
[root@localhost /]# docker run -it centos /bin/bash
[root@af300afbb0e7 /]# [root@localhost /]#
[root@localhost /]#
[root@localhost /]# ^C
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af300afbb0e7 centos "/bin/bash" 30 seconds ago Up 29 seconds friendly_antonelli
[root@localhost /]#
4.4.5、删除容器 docker rm
命令示范:
docker rm a94dc46269f9
docker rm a94dc46269f9 d6c1042e0fca
docker rm -f $(docker ps -aq)
docker rm 容器ID # 删除指定的容器,不能删除正在运行的容器,如果要强制的话 rm -f
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
示例
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af300afbb0e7 centos "/bin/bash" 3 minutes ago Up 3 minutes friendly_antonelli
d6c1042e0fca centos "/bin/bash" 12 minutes ago Exited (0) 10 minutes ago boring_khayyam
a94dc46269f9 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago tender_brahmagupta
[root@localhost /]# docker rm a94dc46269f9
a94dc46269f9
[root@localhost /]# docker rm d6c1042e0fca
d6c1042e0fca
[root@localhost /]# docker rm -f $(docker ps -aq)
af300afbb0e7
4.4.6、启动和停止容器的操作 docker start
命令示范:docker start 076536eb29ee
docker start 容器ID #启动容器
docker restart 容器ID #重启容器
docker stop 容器ID #停止当前正在运行容器容器
docker kill 容器ID #强制停止容器
示例
[root@localhost /]# docker run -it centos /bin/bash
[root@076536eb29ee /]# exit
exit
[root@localhost /]#
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
076536eb29ee centos "/bin/bash" 10 seconds ago Exited (0) 8 seconds ago hungry_poincare
[root@localhost /]# docker start 076536eb29ee
076536eb29ee
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
076536eb29ee centos "/bin/bash" 32 seconds ago Up 7 seconds hungry_poincare
[root@localhost /]# docker stop 076536eb29ee
076536eb29ee
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4.6、常用其他命令(重要)
4.6.1、后台启动容器 docker run -d 镜像名
命令示范:docker run -d centos
命令 docker run -d 镜像名
[root@localhost /]# docker run -d centos
f09dbc1f166df65ba6776d90e0cb34048545cf1bbceb62fee3066ce6d1874992
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
问题,docker ps 发现centos 停止了
常见问题的坑,docker 容器使用后台运行,必须有一个前台进程,docker发现没有应用,就会自动停止
例如 Nginx 容器启动后,发现自己没有提供服务,就没有程序了
4.6.2、查看日志命令 docker logs
命令示范:docker logs -tf --tail 10 35d5f73579e4
[root@localhost /]# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
##显示日志
-tf #显示日志
–tail number #显示日志条数
#示例1
[root@localhost /]# docker run -d centos /bin/sh -c "while true;do echo wangjinzhi;sleep 1;done"
35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35d5f73579e4 centos "/bin/sh -c 'while t…" 2 seconds ago Up 1 second jovial_almeida
076536eb29ee centos "/bin/bash" 15 minutes ago Up 6 minutes hungry_poin
[root@localhost /]# docker logs -tf --tail 10 35d5f73579e4
2021-07-28T18:21:02.645813184Z wangjinzhi
2021-07-28T18:21:03.647878765Z wangjinzhi
2021-07-28T18:21:04.650559598Z wangjinzhi
2021-07-28T18:21:05.653227572Z wangjinzhi
4.6.3、查看容器中进程信息 docker top
命令示范:docker top 35d5f73579e4
docker top 容器ID
[root@localhost /]# docker top 35d5f73579e4
UID PID PPID C STIME TTY TIME CMD
root 14653 14635 0 02:19 ? 00:00:00 /bin/sh -c while true;do echo wangjinzhi;sleep 1;done
root 15057 14653 0 02:25 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
4.6.4、查看镜像源数据 docker inspect
命令示范:docker inspect 35d5f73579e4
```bash
docker inspect --help
docker inspect 容器的ID
[root@localhost /]# docker inspect 35d5f73579e4
[
{
"Id": "35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1",
"Created": "2021-07-28T18:19:58.286901967Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo wangjinzhi;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 14653,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-07-28T18:19:58.482388499Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
"ResolvConfPath": "/var/lib/docker/containers/35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1/hostname",
"HostsPath": "/var/lib/docker/containers/35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1/hosts",
"LogPath": "/var/lib/docker/containers/35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1/35d5f73579e4aaf4541dd3502869d5639beb33ced2b270f45a7734ce89c795a1-json.log",
"Name": "/jovial_almeida",
"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/2f78575e381cb5665208a87ce784d3ffc8b74abf09fb72861eb9462e8b3af506-init/diff:/var/lib/docker/overlay2/c4de15aec86063d86e42db0dc670a509073e9539dac0035a768d0cd468209e7b/diff",
"MergedDir": "/var/lib/docker/overlay2/2f78575e381cb5665208a87ce784d3ffc8b74abf09fb72861eb9462e8b3af506/merged",
"UpperDir": "/var/lib/docker/overlay2/2f78575e381cb5665208a87ce784d3ffc8b74abf09fb72861eb9462e8b3af506/diff",
"WorkDir": "/var/lib/docker/overlay2/2f78575e381cb5665208a87ce784d3ffc8b74abf09fb72861eb9462e8b3af506/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "35d5f73579e4",
"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 wangjinzhi;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201204",
"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": "eb693203a0cf3f06fce8b45e88d3b7b4ba0de90aaa531dfaa8782c06d0323183",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/eb693203a0cf",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "0762dbc9fb45620b4d5ceb10e0db26f9cd842add29a4de80ef3928716d41dace",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "41fd4c179d4f2f8b60a71fbf7a549867bb58f66f875932a204cab292ff00d993",
"EndpointID": "0762dbc9fb45620b4d5ceb10e0db26f9cd842add29a4de80ef3928716d41dace",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
}
]
4.6.5、进入当前正在运行的容器 docker exec、attach
命令示范:
```bash
docker exec -it 076536eb29ee /bin/bash
docker attach 35d5f73579e4
方式一:
docker exec -it 容器ID baseShell ( 例如: /bin/bash , /bin/sh )
示例
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35d5f73579e4 centos "/bin/sh -c 'while t…" 12 minutes ago Up 12 minutes jovial_almeida
076536eb29ee centos "/bin/bash" 27 minutes ago Up 18 minutes hungry_poincare
[root@localhost /]# docker exec -it 076536eb29ee /bin/bash
方式二:
docker attach 容器ID
[root@localhost /]# docker attach 35d5f73579e4
只是进入正在运行的程序
docker exec #进入容器后开启新的终端,可以在里面操作
docker attach #进入容器正在执行的终端,不会启动新的进程
4.6.6、从容器拷贝文件到主机 docker cp
docker cp 容器id:容器内路径 目的的主机路径
注意:这是在主机操作的,相当于在主机拿docker容器的等下
命令示范:docker cp a15cfade1217:home/test.go /home
[root@localhost data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a15cfade1217 centos "/bin/bash" About a minute ago Up About a minute magical_faraday
#进入dockers容器内部
[root@localhost data]# docker attach a15cfade1217
#新建一个内部文件
[root@a15cfade1217 /]# cd home/
[root@a15cfade1217 home]# touch
touch: missing file operand
Try ‘touch --help’ for more information.
[root@a15cfade1217 home]# touch test.go
[root@a15cfade1217 home]# exit
exit
将文件拷贝出来到主机上
[root@localhost data]# docker cp a15cfade1217:home/test.go /home
[root@localhost data]# cd /home/
[root@localhost home]# ls -a
. … test.go
拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现自动挂载
五、docker安装nginx示例======
5.1、docker pull nginx
5.2、运行nginx镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08b152afcfae 6 days ago 133MB
hello-world latest d1165f221234 4 months ago 13.3kB
centos latest 300e315adb2f 7 months ago 209MB
运行nginx
[root@localhost ~]# docker run -d --name nginx01 -p:3344:80 nginx
-d 后台运行
–name 给容器命名
-p 宿主机端口:容器端口
343f94bb0154c910e2e42559c2c75edcc6b6180f66a22f6bba7503d60acde8d7
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
343f94bb0154 nginx "/docker-entrypoint.…" 6 seconds ago Up 6 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
运行测试
[root@localhost ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
六、可视化面板======
6.1、portainer (先用这个)
Docker 图形化管理工具
docker run -d -p 9000:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer
访问测试:http://192.168.3.50:9000/
6.2、Rancher (CI/CD再用)
七、docker commit 镜像======
7.1、类似于git的原理
docker commit # 提交容器成为一个新的副本
docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名 :[tag]
7.2、实战测试
1、启动默认的tomcat
2、发现默认的Tomcat没有webapps应用
3、现在我自己拷贝进去基本的文件
4、将修改后的容器提交位新的镜像,以后就可以使用,自己的修改后的镜像
[root@localhost ~]# docker commit -a"wang" -m=“add webapps” ed3120d64792 tomcat02:1.0
sha256:853b9408d6f8d2ae090488d1dd1b05dbbfd232bb6ffc68d69a34b27410832b19
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 853b9408d6f8 6 seconds ago 678MB
tomcat 9.0 46cfbf1293b1 5 days ago 668MB
tomcat latest 46cfbf1293b1 5 days ago 668MB
nginx latest 08b152afcfae 6 days ago 133MB
portainer/portainer latest 580c0e4e98b0 4 months ago 79.1MB
5、保持docker容器的当前状态
八、docker容器数据卷(精髓)docker run -it -v ======
如果数据保存在容器中,那么我们容器删除,数据会丢失
需求:数据可以持久化,数据存储在本地
容器之间可以有一个数据共享技术,docker容器中产生的数据同步到本地
这就是卷技术,说白了就是目录的挂载,将容器的目录挂载到linux里面
容器的持久化和同步操作,容器间也可以数据共享,双向绑定
docker run -it -v 主机的目录:容器内部目录
使用 do容id
测试
主机
容器
总结:可以在本地修改很多文件的配置文件以及目录
8.1、实在测试安装mysql
mysql的数据持久化问题 /data/*
[root@localhost ceshi]# docker pull mysql:5.7
注意运行mysql的时候需要密码
Start a mysql server instance
Starting a MySQL instance is simple:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw(密码) -d mysql:tag
... where some-mysql is the name you want to assign to your container, my-secret-pw is the password to be set for the MySQL root user and tag is the tag specifying the MySQL version you want. See the list above for relevant tags.
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
–name 容器名字
[root@localhost ceshi]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
1054fa1631ae5c9c0ae4ed6e5d20f5f1b63b20e56187ddefcb236bd4fa50e67f
[root@localhost ceshi]#
本地测试
挂载目录文件
假设容器删除了,挂载到本地的数据卷,依旧不会丢失
九、docker 安装Gogs,dorne,drone-runner-docker
GOGS百度
dorne 命令
docker run -d\
--volume=/var/lib/drone:/data \
--env=DRONE_DEBUG=true\
--env=DRONE_LOGS_TRACE=true\
--env=DRONE_LOGS_DEBUG=true\
--env=DRONE_LOGS_PRETTY=true\
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GIT_ALWAYS_AUTH=true \
--env=DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \
--env=DRONE_SERVER_HOST=192.168.10.251:10080 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_GOGS_SERVER=http://192.168.10.251:3000 \
--env=DRONE_USER_CREATE=username:wangjinzhi,admin:true \
--publish=10080:80 \
--publish=10443:443 \
--restart=always \
--detach=false \
--name=drone \
drone/drone
drone-runner-ssh 命令
docker run -d \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.10.251:10080 \
-e DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \
-e DRONE_DEBUG=true \
-p 10081:3000 \
--restart always \
--name ssh-runner \
drone/drone-runner-ssh
drone-runner-docker 命令
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.10.251:10080 \
-e DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=docker-runner \
-e DRONE_DEBUG=true \
-p 10082:3000 \
--restart always \
--name docker-runner \
drone/drone-runner-docker
10、Docker 命令修改:更新配置
docker container update --restart=always 容器名字
https://github.com/Tinywan/dnmp
11、使用docker注意事项(nginx)
例如nginx 访问的时候 docker里面是 var/wwwroot 的存放路径 指向 宿主机的路径 data/wwwroot 当在配置nginx的时候需要写的是 docker里面的 路径root /var/wwwroot