docker1 192.168.8.1 2cpu 2G以上内存 20G以上硬盘 1网卡(vbr)
docker2 192.168.8.2 2cpu 2G以上内存 20G以上硬盘 1网卡(vbr)
[root@docker1 ~]# vim /etc/hosts
192.168.8.1 docker1
192.168.8.2 docker2
[root@docker2 ~]# vim /etc/hosts
192.168.8.1 docker1
192.168.8.2 docker2
[root@docker1 ~]# yum search docker
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
=========================== N/S matched: docker ===========================
docker-engine.x86_64 : The open-source application container engine
docker-engine-selinux.noarch : SELinux Policies for the open-source
: application container engine
名称和简介匹配 only,使用“search all”试试。
[root@docker2 ~]# yum search docker
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
=========================== N/S matched: docker ===========================
docker-engine.x86_64 : The open-source application container engine
docker-engine-selinux.noarch : SELinux Policies for the open-source
: application container engine
名称和简介匹配 only,使用“search all”试试。
安装Docker
[root@docker1 ~]# yum -y install docker-engine
[root@docker1 ~]# ifconfig
[root@docker1 ~]# systemctl start docker
[root@docker1 ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:5a:25:2c:46 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
[root@docker2 ~]# yum -y install docker-engine
[root@docker2 ~]# ifconfig
[root@docker2 ~]# systemctl start docker
[root@docker2 ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:5a:25:2c:46 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
查看版本
[root@docker1 ~]# docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built:
OS/Arch: linux/amd64
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built:
OS/Arch: linux/amd64
查看镜像
[root@docker1 ~]# docker images
[root@docker1 ~]# docker search mysql 搜索Mysql
[root@docker1 ~]# docker search centos 搜索Centos
[root@docker1 ~]# docker search busybox 搜索Busybox
[root@docker1 ~]# docker pull busybox 下载Busybox
[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
帮助
[root@docker1 ~]# docker help push
Usage: docker push [OPTIONS] NAME[:TAG]
Push an image or a repository to a registry
Options:
--disable-content-trust Skip image verification (default true)
--help Print usage
[root@docker1 ~]# docker help pull
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--help Print usage
[root@docker1 ~]# docker help search
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter value Filter output based on conditions provided (default [])
--help Print usage
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
[root@docker1 ~]# docker search -f is-official=true busybox
只搜索官方提供的包
[root@docker1 ~]# docker save busybox:latest > abc
备份
[root@docker1 ~]# mv abc busybox.tar
[root@docker1 ~]# tar -tvf busybox.tar
-rw-r--r-- 0/0 1496 2019-05-09 17:19 64f5d945efcc0f39ab11b3cd4ba403cc9fefe1fa3613123ca016cf3708e8cafb.json
drwxr-xr-x 0/0 0 2019-05-09 17:19 a57c26390d4b78fd575fac72ed31f16a7a2fa3ebdccae4598513e8964dace9b2/
-rw-r--r-- 0/0 3 2019-05-09 17:19 a57c26390d4b78fd575fac72ed31f16a7a2fa3ebdccae4598513e8964dace9b2/VERSION
-rw-r--r-- 0/0 1174 2019-05-09 17:19 a57c26390d4b78fd575fac72ed31f16a7a2fa3ebdccae4598513e8964dace9b2/json
-rw-r--r-- 0/0 1415680 2019-05-09 17:19 a57c26390d4b78fd575fac72ed31f16a7a2fa3ebdccae4598513e8964dace9b2/layer.tar
-rw-r--r-- 0/0 203 1969-12-31 19:00 manifest.json
-rw-r--r-- 0/0 90 1969-12-31 19:00 repositories
[root@docker1 ~]# docker save busybox:latest > busybox.tar
[root@docker1 ~]# scp busybox.tar docker2:./
[root@docker2 ~]# ls
busybox.tar
[root@docker2 ~]# docker load < busybox.tar 恢复
d1156b98822d: Loading layer 1.416 MB/1.416 MB
Loaded image: busybox:latest
[root@docker2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
[root@docker2 ~]# docker save busybox:latest -o busybox.tar
[root@docker1 ~]# yum -y install unzip
[root@docker1 ~]# unzip docker_images.zip
Archive: docker_images.zip
creating: docker_images/
inflating: docker_images/nginx.tar
inflating: docker_images/redis.tar
inflating: docker_images/centos.tar
inflating: docker_images/registry.tar
inflating: docker_images/ubuntu.tar
[root@docker1 ~]# yum -y install unzip
[root@docker1 ~]# unzip docker_images.zip
Archive: docker_images.zip
creating: docker_images/
inflating: docker_images/nginx.tar
inflating: docker_images/redis.tar
inflating: docker_images/centos.tar
inflating: docker_images/registry.tar
inflating: docker_images/ubuntu.tar
[root@docker2 ~]# yum -y install unzip
[root@docker2 ~]# unzip docker_images.zip
Archive: docker_images.zip
creating: docker_images/
inflating: docker_images/nginx.tar
inflating: docker_images/redis.tar
inflating: docker_images/centos.tar
inflating: docker_images/registry.tar
inflating: docker_images/ubuntu.tar
[root@docker1 ~]# cd docker_images/
[root@docker1 docker_images]# for i in *;do docker load -i ${i};done
[root@docker2 ~]# cd docker_images/
[root@docker2 docker_images]# for i in *;do docker load -i ${i};done
启动镜像
启动centos镜像生成一个容器
[root@docker1 ~]# docker images
[root@docker1 ~]# docker run -it centos:latest /bin/bash
测试:
主机名,网络,文件系统,进程,用户
[root@db0d56cc0e37 /]# cd /etc/yum.repos.d/
[root@db0d56cc0e37 yum.repos.d]# ls
CentOS-Base.repo CentOS-Media.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Sources.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
[root@db0d56cc0e37 yum.repos.d]# rm -f *
[root@db0d56cc0e37 yum.repos.d]# vi centos.repo
[dvd]
name=dvd
baseurl="ftp://192.168.8.254/rhel7"
enabled=1
gpgcheck=0
[root@db0d56cc0e37 yum.repos.d]# yum provides ifconfig
Loaded plugins: fastestmirror, ovl
dvd | 4.1 kB 00:00
(1/2): dvd/group_gz | 137 kB 00:00
(2/2): dvd/primary_db | 4.0 MB 00:00
Determining fastest mirrors
dvd/filelists_db | 3.4 MB 00:00
net-tools-2.0-0.22.20131004git.el7.x86_64 : Basic networking tools
Repo : dvd
Matched from:
Filename : /sbin/ifconfig
[root@db0d56cc0e37 yum.repos.d]# yum -y install net-tools
[root@db0d56cc0e37 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 319 bytes 8231709 (7.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 254 bytes 18265 (17.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@db0d56cc0e37 ~]# yum -y install psmisc
[root@db0d56cc0e37 ~]# pstree
bash---pstree
[root@docker1 ~]# sleep 1111111111111
[root@666 ~]# ps -ef | grep sleep
root 15604 978 0 19:09 ? 00:00:00 sleep 60
root 15666 15619 0 19:10 pts/5 00:00:00 grep --color=auto sleep
[root@docker1 ~]# ps -ef | grep sleep
root 11087 11068 0 07:12 pts/2 00:00:00 grep --color=auto sleep
[root@db0d56cc0e37 ~]# sleep 11111111111
[root@docker1 ~]# ps -ef | grep sleep
root 11089 11005 0 07:12 pts/1 00:00:00 sleep 11111111111
root 11091 11068 0 07:12 pts/2 00:00:00 grep --color=auto sleep
[root@docker1 ~]# kill 11089
[root@db0d56cc0e37 ~]# sleep 11111111111
Terminated
[root@docker1 ~]# sleep 1111111111111
^Z
[1]+ 已停止 sleep 1111111111111
[root@docker1 ~]# bg
[1]+ sleep 1111111111111 &
[root@docker1 ~]# pstree -p
[root@docker1 ~]# docker run -it busybox:latest /bin/bash
docker: Error response from daemon: oci runtime error: exec: "/bin/bash": stat /bin/bash: no such file or directory.
报错原因是:没有"/bin/bash"这个可执行文件
[root@docker1 ~]# docker run -it busybox:latest
启动的是默认启动命令
/ # ps -ef 它启动的是sh
PID USER TIME COMMAND
1 root 0:00 sh
10 root 0:00 ps -ef
[root@docker1 ~]# docker run -it busybox:latest /bin/sh
/ #
[root@docker1 ~]# docker run -it centos:latest
[root@docker1 ~]# docker run -it ubuntu:latest
[root@docker1 ~]# docker run -it nginx:latest /bin/bash
[root@docker1 ~]# systemctl stop sshd
[root@docker1 ~]# cat /usr/lib/systemd/system/sshd.service
[Unit] 说明
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service] 执行的命令
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install] 运行级别
WantedBy=multi-user.target
[root@docker1 ~]# systemctl restart sshd
开启一个终端(查看容器信息)
[root@docker1 ~]# docker ps
查看镜像制作历史
[root@docker1 ~]# docker history busybox:latest
IMAGE CREATED CREATED BY SIZE COMMENT
64f5d945efcc 2 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:e36dd1822f36a81696 1.199 MB
[root@docker1 ~]# docker history centos:latest
IMAGE CREATED CREATED BY SIZE COMMENT
e934aafc2206 13 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 13 months ago /bin/sh -c #(nop) LABEL org.label-schema.sch 0 B
<missing> 13 months ago /bin/sh -c #(nop) ADD file:f755805244a649ecca 198.6 MB
[root@docker1 ~]# docker history nginx:latest
IMAGE CREATED CREATED BY SIZE COMMENT
a5311a310510 2 years ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon 0 B
<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B
<missing> 2 years ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 0 B
<missing> 2 years ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 58.43 MB
<missing> 2 years ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.11.5-1 0 B
<missing> 2 years ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Ma 0 B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:c6c23585ab140b0b32 123 MB
查看镜像底层信息
[root@docker1 ~]# docker inspect busybox:latest
[root@docker1 ~]# docker inspect nginx:latest
删除本地镜像
[root@docker2 ~]# docker images
[root@docker2 ~]# docker rmi busybox:latest
[root@docker2 ~]# docker rmi ubuntu:latest
[root@docker2 ~]# docker rmi centos:latest
[root@docker2 ~]# docker rmi registry:latest
[root@docker2 ~]# docker rmi nginx:latest
[root@docker2 ~]# docker rmi redis:latest
修改镜像名称和标签
[root@docker1 ~]# docker images
[root@docker1 ~]# docker tag busybox:latest abc:oxox
[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
abc oxox 64f5d945efcc 2 weeks ago 1.199 MB
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
[root@docker1 ~]# docker tag 64f5d945efcc abc:xxcc
[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
abc oxox 64f5d945efcc 2 weeks ago 1.199 MB
abc xxcc 64f5d945efcc 2 weeks ago 1.199 MB
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
[root@docker1 ~]# docker run -it 64f5d945efcc
[root@docker1 ~]# docker rmi abc:xxcc
Untagged: abc:xxcc
[root@docker1 ~]# docker rmi abc:oxox
Untagged: abc:oxox
运行容器
-i 交互式
-t 终端
-d 后台运行
[root@docker1 ~]# docker run -itd nginx:latest
dc941d75b5b81f0efebbe5af0e812e3ae9180133da447f4f88e05aadb6a3a713
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc941d75b5b8 nginx:latest "nginx -g 'daemon off" 32 seconds ago Up 29 seconds 80/tcp, 443/tcp compassionate_meitner
关闭容器
[root@docker1 ~]# docker stop dc941d75b5b8
dc941d75b5b8
[root@docker1 ~]# docker ps
启动容器
[root@docker1 ~]# docker start dc941d75b5b8
dc941d75b5b8
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc941d75b5b8 nginx:latest "nginx -g 'daemon off" 2 minutes ago Up 1 seconds 80/tcp, 443/tcp compassionate_meitner
[root@docker1 ~]# docker inspect 3990c578ca6e
[root@docker1 ~]# docker run -it centos
[root@62e590fb0ec5 /]# sleep 12357689 &
[1] 13
[root@62e590fb0ec5 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:05 ? 00:00:00 /bin/bash
root 13 1 0 14:05 ? 00:00:00 sleep 12357689
root 14 1 0 14:06 ? 00:00:00 ps -ef
[root@docker1 ~]# ps -ef | grep sleep
root 11092 1 0 07:15 ? 00:00:00 sleep 1111111111111
root 13530 13504 0 10:05 pts/8 00:00:00 sleep 12357689
root 13534 800 0 10:06 pts/0 00:00:00 grep --color=auto sleep
[root@docker1 ~]# docker ps
[root@docker1 ~]# docker top 62e590fb0ec5
UID PID PPID C STIME TTY TIME CMD
root 13504 13491 0 10:05 pts/8 00:00:00 /bin/bash
root 13530 13504 0 10:05 pts/8 00:00:00 sleep 12357689
[root@docker1 ~]# kill 13530
[root@docker1 ~]# docker top 62e590fb0ec5
UID PID PPID C STIME TTY TIME CMD
root 13504 13491 0 10:05 pts/8 00:00:00 /bin/bash
删除运行容器
[root@docker1 ~]# docker ps -aq
[root@docker1 ~]# docker rm $(docker stop 62e590fb0ec5)
[root@docker1 ~]# docker rm $(docker stop 16a2a2504ade)
[root@docker1 ~]# docker rm $(docker ps -aq)
交互式容器
[root@docker1 ~]# docker run -itd centos
082263d69d41716950e4b3f8ecdd6b383f697bfdeddfbd13eafb114dca145d49
[root@docker1 ~]# docker run -itd nginx
07bfa5e9cc88ee207e8f7c04fc61a548f7bb953b14fa1e664a6258646ff2891d
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07bfa5e9cc88 nginx "nginx -g 'daemon off" 50 seconds ago Up 46 seconds 80/tcp, 443/tcp determined_banach
082263d69d41 centos "/bin/bash" 57 seconds ago Up 54 seconds suspicious_lamarr
[root@docker1 ~]# docker attach 082263d69d41
临一个终端
[root@docker1 ~]# docker run -it centos
[root@da8a93d4d30f /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:29 ? 00:00:00 /bin/bash
root 13 1 0 14:29 ? 00:00:00 ps -ef
[root@da8a93d4d30f /]# echo $$
1
Ctrl+p+q
[root@da8a93d4d30f /]# [root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da8a93d4d30f centos "/bin/bash" About a minute ago Up About a minute sharp_payne
[root@docker1 ~]# docker run -itd nginx
2257832a98a25443c1258db2406f8663e719431017ea124d45eee15baf6eea69
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2257832a98a2 nginx "nginx -g 'daemon off" 23 seconds ago Up 20 seconds 80/tcp, 443/tcp tiny_bell
da8a93d4d30f centos "/bin/bash" 4 minutes ago Up 4 minutes sharp_payne
[root@docker1 ~]# docker exec -it 2257832a98a2 /bin/bash
root@2257832a98a2:/# echo $$
6
root@2257832a98a2:/# exit
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2257832a98a2 nginx "nginx -g 'daemon off" About a minute ago Up About a minute 80/tcp, 443/tcp tiny_bell
da8a93d4d30f centos "/bin/bash" 6 minutes ago Up 6 minutes sharp_payne
[root@docker1 ~]# docker attach 2257832a98a2
[root@docker1 ~]# docker inspect 2257832a98a2
[root@docker1 ~]# curl 172.17.0.3
[root@docker1 ~]# docker attach 2257832a98a2
172.17.0.1 - - [28/May/2019:14:40:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
#---------------------------------------------------------------------------------------------------------------
1.启动一个 centos 的容器
2.安装一个 apache
3.设置默认首页为 Hello wokd
4.启动一个 nginx 的容器
5.设置默认首页为 Hello wokd
列如:
[root@docker1 ~]# docker rm $(docker stop $(docker ps -aq))
[root@docker1 ~]# cat /etc/yum.repos.d/dvd.repo
[docker]
name=docker
baseurl=ftp://192.168.8.254/docker
enabled=1
gpgcheck=0
[dvd]
name=dvd
baseurl=ftp://192.168.8.254/rhel7
enabled=1
gpgcheck=0
[root@docker1 ~]# docker run -it centos
[root@014251dd73ae /]# rm -rf /etc/yum.repos.d/*
[root@014251dd73ae /]# vi /etc/yum.repos.d/centos.repo
[dvd]
name=dvd
baseurl=ftp://192.168.8.254/rhel7
enabled=1
gpgcheck=0
[root@014251dd73ae /]# yum -y install httpd vim
[root@014251dd73ae /]# yum -y install net-tools psmisc tree
[root@014251dd73ae /]# pstree -p
bash(1)---pstree(56)
[root@014251dd73ae /]# vim /var/www/html/index.html
Hello wokd
[root@014251dd73ae /]# ifconfig
[root@014251dd73ae /]# /usr/sbin/httpd $OPTIONS -DFOREGROUND
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Ctrl+p+q
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
014251dd73ae centos "/bin/bash" 10 minutes ago Up 10 minutes big_mcnulty
[root@docker1 ~]# docker top 014251dd73ae
[root@docker1 ~]# curl 172.17.0.2
Hello wokd
[root@docker1 ~]# docker run -itd nginx
3c17e4cffe6dc7375dbcd49e57e52c3929bff867c441fb32d2bdcec0bee0af1b
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c17e4cffe6d nginx "nginx -g 'daemon off" 24 seconds ago Up 21 seconds 80/tcp, 443/tcp sick_jepsen
014251dd73ae centos "/bin/bash" 15 minutes ago Up 15 minutes big_mcnulty
root@3c17e4cffe6d:/# cat /etc/debian_version
8.6
#--------------------------------------------
RedHat Debian |
#--------------------------------------------
rpm dpkg |
yum apt-get |
#--------------------------------------------
[root@docker1 ~]# docker exec -it 014251dd73ae /bin/bash
[root@014251dd73ae /]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@014251dd73ae /]# rpm -qa | grep httpd
root@3c17e4cffe6d:/# dpkg -l | grep nginx
[root@014251dd73ae /]# rpm -ql httpd
root@3c17e4cffe6d:/# dpkg -L nginx
[root@014251dd73ae /]# rpm -qf /bin/ls
root@3c17e4cffe6d:/# dpkg -S /bin/ls
#------------------------------------------------------------------------------------------------------------
自定义镜像
[root@docker1 ~]# docker rm $(docker stop $(docker ps -aq))
[root@docker1 ~]# docker ps -a
[root@docker1 ~]# docker images
[root@docker1 ~]# cat /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
baseurl=ftp://192.168.8.254/rhel7
enabled=1
gpgcheck=0
[root@docker1 ~]# docker run -it centos
[root@e62b34b4ab22 /]# rm -rf /etc/yum.repos.d/*
[root@e62b34b4ab22 /]# vi /etc/yum.repos.d/centos.repo
[dvd]
name=dvd
baseurl=ftp://192.168.8.254/rhel7
enabled=1
gpgcheck=0
[root@e62b34b4ab22 /]# yum repolist
[root@e62b34b4ab22 /]# yum -y install vim net-tools psmisc lftp tree
[root@e62b34b4ab22 /]# yum -y install iproute
[root@e62b34b4ab22 /]# ip a s eth0
[root@e62b34b4ab22 /]# vim
[root@e62b34b4ab22 /]# ifconfig
[root@docker1 ~]# docker ps -a
把容器变成镜像
[root@docker1 ~]# docker commit e62b34b4ab22 myol:latest
sha256:0db44311a73859aeb1dcd5120f75525dec93b96ddb9b85910811aee3f2d6d012
[root@docker1 ~]# docker ps -a
[root@docker1 ~]# docker rm e62b34b4ab22
[root@docker1 ~]# docker ps -a
[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myol latest b38331d66e87 5 minutes ago 307.2 MB
[root@docker1 ~]# docker history myol
IMAGE CREATED CREATED BY SIZE COMMENT
b38331d66e87 7 minutes ago /bin/bash 108.5 MB
[root@docker1 ~]# docker run -it b38331d66e87 /bin/bash
[root@bb1e5a38444f ~]# cat /etc/yum.repos.d/centos.repo
[dvd]
name=dvd
baseurl=ftp://192.168.8.254/rhel7
enabled=1
gpgcheck=0
Dockerfile语法格式:
FROM:基础镜像
MAINTAINER:镜像创建者信息(说明)
EXPOSE:开放的端口
ENV:设置环境变量
ADD:复制文件到镜像
RUN:制作镜像时执行的命令,可以有多个
WORKDIR:定义容器默认工作目录
CMD:容器启动时执行的命令,仅可以有一条CMD
[root@docker1 ~]# rm -rf *
[root@docker1 ~]# mkdir Docker
[root@docker1 ~]# cd Docker
[root@docker1 Docker]# touch Dockerfile
[root@docker1 Docker]# vim Dockerfile
FROM centos:latest
RUN rm -rf /etc/yum.repos.d/*.repo
容器内
ADD dvd.repo /etc/yum.repos.d/local.repo
本地路径 容器里的路径
RUN yum -y install vim net-tools psmisc lftp tree iproute
[root@docker1 Docker]# cp /etc/yum.repos.d/dvd.repo ./
[root@docker1 Docker]# docker build -t test:latest .
[root@docker1 Docker]# docker images
[root@docker1 Docker]# docker run -it test
[root@992171486e6c /]# yum repolist
[root@docker1 Docker]# vim Dockerfile
FROM myol:latest
CMD ["/usr/bin/python"]
[root@docker1 Docker]# docker build -t myol:python .
[root@docker1 Docker]# docker images
[root@docker1 Docker]# docker ps -a
[root@docker1 Docker]# docker rm 992171486e6c
[root@docker1 Docker]# docker rmi test:latest
[root@docker1 Docker]# docker images
[root@docker1 Docker]# docker run -it myol:python
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
排错思路:
[root@docker1 Docker]# docker run -it myol
[root@3e0b42f78664 /]# yum list | grep ssh
[root@3e0b42f78664 /]# yum -y install openssh-server
[root@3e0b42f78664 /]# cat /usr/lib/systemd/system/sshd.service
[root@3e0b42f78664 /]# EnvironmentFile=/etc/sysconfig/sshd
环境变量
[root@3e0b42f78664 /]# /usr/sbin/sshd -D $OPTIONS 报错
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
[root@3e0b42f78664 /]# sshd-keygen 报错
/usr/sbin/sshd-keygen: line 10: /etc/rc.d/init.d/functions: No such file or directory
Generating SSH2 RSA host key: /usr/sbin/sshd-keygen: line 63: success: command not found
Generating SSH2 ECDSA host key: /usr/sbin/sshd-keygen: line 105: success: command not found
Generating SSH2 ED25519 host key: /usr/sbin/sshd-keygen: line 126: success: command not found
[root@3e0b42f78664 /]# yum provides /etc/rc.d/init.d/functions
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
initscripts-9.49.39-1.el7.x86_64 : The inittab file and the /etc/init.d scripts
Repo : dvd
Matched from:
Filename : /etc/rc.d/init.d/functions
[root@3e0b42f78664 /]# yum -y install initscripts-9.49.39-1.el7.x86_64
[root@3e0b42f78664 /]# sshd-keygen
[root@3e0b42f78664 /]# passwd root
Changing password for user root.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@3e0b42f78664 /]# /usr/sbin/sshd -D $OPTIONS
Ctrl+p+q
[root@docker1 Docker]# ssh 172.17.0.2
[root@docker1 ~]# mkdir Docker1
[root@docker1 ~]# cd Docker1
[root@docker1 Docker1]# touch Dockerfile
[root@docker1 Docker1]# vim Dockerfile
FROM myol:latest
RUN yum -y install openssh-server initscripts
RUN sshd-keygen
RUN echo "1" | passwd --stdin root
ENV EnvironmentFile=/etc/sysconfig/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
[root@docker1 Docker1]# docker build -t myol:sshd .
[root@docker1 Docker1]# docker images
[root@docker1 Docker1]# docker run -itd myol:sshd
[root@docker1 Docker1]# docker ps
[root@docker1 Docker1]# docker stop 3e
[root@docker1 Docker1]# ssh 172.17.0.2
#---------------------------------
制作一个 httpd 的镜像
默认首页 Hello World
默认工作目录 /var/www/html
[root@docker1 ~]# docker run -it myol:latest
[root@cd0051bcdfcb /]# yum -y install httpd
[root@cd0051bcdfcb /]# cd /var/www/html/
[root@cd0051bcdfcb html]# vim index.html
Hello World
[root@cd0051bcdfcb html]# cat /usr/lib/systemd/system/httpd.service
[root@cd0051bcdfcb html]# EnvironmentFile=/etc/sysconfig/httpd
[root@docker1 ~]# mkdir Docker2
[root@docker1 ~]# cd Docker2
[root@docker1 Docker2]# vim indexm.html
Hello World
[root@docker1 Docker2]# touch Dockerfile
[root@docker1 Docker2]# vim Dockerfile
FROM myol:latest
RUN yum -y install httpd
WORKDIR /var/www/html
ADD index.html index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
EXPOSE 80
EXPOSE 443
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
[root@docker1 Docker2]# docker build -t myol:httpd .
[root@docker1 Docker2]# docker images
[root@docker1 Docker2]# docker run -itd myol:httpd
[root@docker1 Docker2]# docker ps
[root@docker1 Docker2]# docker inspect 7c
[root@docker1 Docker2]# curl 172.17.0.3
Hello World
[root@docker1 Docker3]# docker help inspect
[root@docker1 Docker3]# docker inspect -f "{{.NetworkSettings.IPAddress}}" 7cc195d45d86172.17.0.3
[root@docker1 Docker3]# docker inspect -f "{{.NetworkSettings.MacAddress}}" 7cc195d45d86
02:42:ac:11:00:03
[root@docker1 Docker3]# docker inspect -f "{{.State.Pid}}" 7cc195d45d86
5648
镜像仓库 – 服务器
创建配置文件 /etc/docker/daemon.json
[root@docker1 ~]# vim /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.8.1:5000"]
}
[root@docker1 ~]# systemctl restart docker
启动私有仓库
[root@docker1 ~]# docker run -itd -p 5000:5000 registry
[root@docker1 ~]# curl http://192.168.8.1:5000/v2/
{}
上传镜像到私有仓库
[root@docker1 ~]# docker tag busybox:latest 192.168.8.1:5000/busybox:latest
[root@docker1 ~]# docker push 192.168.8.1:5000/busybox:latest
[root@docker2 ~]# curl http://192.168.8.1:5000/v2/_catalog
{"repositories":[]}
镜像仓库 – 客户端
配置 daemon.json
[root@docker1 ~]# for i in latest python sshd httpd;do
> docker tag myol:${i} 192.168.8.1:5000/myol:${i}
> docker push 192.168.8.1:5000/myol:${i}
> docker rmi 192.168.8.1:5000/myol:${i}
> done
[root@docker2 ~]# docker images
[root@docker2 ~]# scp docker1:/etc/docker/daemon.json /etc/docker/
[root@docker2 ~]# systemctl restart docker
[root@docker2 ~]# docker run -it 192.168.8.1:5000/myol:latest
[root@d5f880753166 /]# ifconfig
[root@d5f880753166 /]# vim
持久化存储
[root@docker1 ~]# cd /var/
[root@docker1 var]# mkdir webroot
[root@docker1 var]# docker run -it -v /var/webroot/:/abc myol
[root@73609ffbcc28 abc]# watch -n 0.1 'ls -l'
[root@docker1 ~]# cd /var/webroot/
[root@docker1 webroot]# touch q1 q2 q3 q4 q5
[root@docker1 webroot]# rm -rf q3 q4 q5
[root@docker1 webroot]# docker run -it -v /var/webroot/:/root/ myol
bash-4.2# touch a s c
bash-4.2# rm -rf a s c
创建一个 NFS 服务器
docker1 mount nfs 服务器共享出来的目录
在 docker1 上启动 Nginx 容器
把 mount 的共享目录辐射给容器
docker2 mount nfs 服务器共享出来的目录
在 docker2 上启动 Nginx 容器
把 mount 的共享目录辐射给容器
实现 apache 和 nginx 容器共享同一个 web 目录
docker1, nginx (nfs)
NFS
docker2, apache (nfs)
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# vim /etc/exports
/var/webroot *(rw)
[root@nfs ~]# mkdir /var/webroot
[root@nfs ~]# chmod 777 /var/webroot
[root@nfs ~]# systemctl restart nfs
[root@docker1 ~]# yum -y install nfs-utils
[root@docker1 ~]# showmount -e 192.168.8.3
Export list for 192.168.8.3:
/var/webroot *
[root@docker1 ~]# mount -t nfs 192.168.8.3:/var/webroot/ /var/webroot/
[root@docker2 ~]# yum -y install nfs-utils
[root@docker2 ~]# mount -t nfs 192.168.8.3:/var/webroot/ /var/webroot/
[root@docker2 ~]# vim /var/webroot/index.html
Hello World
[root@docker1 ~]# ls -l /var/webroot/
总用量 4
-rw-r--r-- 1 nfsnobody nfsnobody 11 5月 30 04:58 index.html
[root@docker1 ~]# docker run -it nginx /bin/bash
root@0f871f75a9e5:/# nginx -T
[root@docker1 ~]# docker run -itd -v /var/webroot/:/usr/share/nginx/html nginx
[root@docker1 ~]# docker inspect e7
[root@docker1 ~]# curl -i 172.17.0.4
HTTP/1.1 200 OK
Server: nginx/1.11.5
Date: Thu, 30 May 2019 09:03:54 GMT
Content-Type: text/html
Content-Length: 11
Last-Modified: Thu, 30 May 2019 08:58:45 GMT
Connection: keep-alive
ETag: "5cef9b45-b"
Accept-Ranges: bytes
Hello Word
[root@docker1 ~]# docker tag myol:httpd 192.168.8.1:5000/myol:httpd
[root@docker1 ~]# docker push 192.168.8.1:5000/myol:httpd
[root@docker1 ~]# curl http://192.168.8.1:5000/v2/_catalog
{"repositories":["myol"]}
[root@docker2 ~]# docker run -itd -v /var/webroot:/var/www/html 192.168.8.1:5000/myol:httpd
[root@docker2 ~]# docker inspect 443
[root@docker2 ~]# curl -i 172.17.0.3
HTTP/1.1 200 OK
Date: Thu, 30 May 2019 09:19:14 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux)
Last-Modified: Thu, 30 May 2019 08:58:45 GMT
ETag: "b-58a171afb77b3"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8
Hello Word
[root@docker2 ~]# vim /var/webroot/index.html
Hello Word
Hello Word
Hello Word
Hello Word
Hello Word
[root@docker2 ~]# curl -i 172.17.0.3
[root@docker1 ~]# curl -i 172.17.0.4
[root@nfs ~]# halt -p 关机
Docker网络
[root@nfs ~]# ifconfig
[root@nfs ~]# ifconfig eth0:1 192.168.8.100/24
[root@nfs ~]# ifconfig
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.100 netmask 255.255.255.0 broadcast 192.168.8.255
ether 52:54:00:d9:d2:a8 txqueuelen 1000 (Ethernet)
[root@nfs ~]# ifconfig eth0:1 down
[root@nfs ~]# yum -y install bridge-utils 工具包
[root@nfs ~]# cd /etc/sysconfig/network-scripts/
[root@nfs network-scripts]# cp ifcfg-eth0 ifcfg-docker0
[root@nfs network-scripts]# vim ifcfg-docker0
# Generated by dracut initrd
DEVICE="docker0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Bridge"
BOOTPROTO="static"
IPADDR="172.17.0.1"
NETMASK="255.255.255.0"
[root@nfs network-scripts]# systemctl restart network
[root@nfs network-scripts]# ifconfig
[root@docker1 ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
6de195071e34 bridge bridge local
d312034a8b2c host host local
1a1be80eecbe none null local
Docker 支持3种网络拓补模型
[root@docker1 ~]# docker network
#-------------------------------------------------------------------
创建 docker1 虚拟交换机,并设置ip网络为 10.10.10.0/24
[root@docker1 ~]# docker network create --subnet=10.10.10.0/24 docker1
[root@docker1 ~]# ifconfig
[root@docker1 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
20939c97be40 docker1 bridge local
连接 docker0 的容器
[root@docker1 ~]# docker run -it busybox
/ # ifconfig
172.17.0.2
Ctrl+p+q
[root@docker1 ~]# docker run -it busybox
/ # ifconfig
172.17.0.3
/ # ping 172.17.0.2
Ctrl+p+q
[root@docker1 ~]# docker run -it --network=docker1 busybox
/ # ifconfig
10.10.10.2
Ctrl+p+q
[root@docker1 ~]# docker run -it --network=docker1 busybox
/ # ifconfig
10.10.10.3
/ # ping 10.10.10.2
Ctrl+p+q
[root@docker1 ~]# docker rm $(docker stop $(docker ps -aq))
-p 宿主机端口:端口
把 docker1 变成 web 服务器
[root@docker1 ~]# docker run -itd -p 80:80 myol:httpd
浏览器中输入192.168.8.1
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf85830bd647 myol:httpd "/usr/sbin/httpd -DFO" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, 443/tcp boring_galileo
[root@docker1 ~]# docker exec -it b /bin/bash
[root@docker1 ~]# docker exec -it b /bin/bash
[root@bf85830bd647 html]# rm -rf index.html
浏览器中F5
[root@docker1 ~]# docker stop b
[root@docker1 ~]# docker run -itd -p 80:80 nginx
浏览器中F5