习题一
配置docker容器的镜像加速器,使得在下载镜像的可以进一步的提速
自行先登录注册登录到阿里云(每一个账号对应一个加速通道)
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://ocfyrwaf.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://ocfyrwaf.mirror.aliyuncs.com"]
}
复制对应的代码,然后在系统上执行即可
习题二
下载WordPress博客系统镜像以及mariadb数据库镜像,运行镜像,让WordPress连接到mariadb数据库镜像
[root@localhost ~]# docker pull docker.io/wordpress //下载WordPress镜像
[root@localhost ~]# docker pull docker.io/mariadb //下载mariadb数据库镜像
启动数据库镜像 -e参数设置启动时的环境变量
[root@localhost ~]# docker run -itd --name=mysqld -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=123456 docker.io/mariadb:latest
8aff6faf84260152bbbb043bbb480c6b0047de5fa0d710525d594dbc942b1b3c
[root@localhost ~]# docker ps //查看启动状态是否为UP
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8aff6faf8426 docker.io/mariadb:latest "docker-entrypoint..." 33 seconds ago Up 30 seconds 0.0.0.0:3306->3306/tcp mysqld
启动WordPress镜像,然后连接到启动的数据库 --link 数据库容器的名称:db
[root@localhost ~]# docker run -itd --name=wordpress -p 80:80 --restart=always --link mysqld:db docker.io/wordpress:latest
44c71069c9acb37b338a15ebef514825402cd42e3a57885100ead76b7c89e40d
[root@localhost ~]# docker ps //查看运行是否成功
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44c71069c9ac docker.io/wordpress:latest "docker-entrypoint..." 32 seconds ago Up 31 seconds 0.0.0.0:80->80/tcp wordpress
查看连接数据库是否成功
[root@localhost ~]# docker inspect 44c71069c9ac
"Cgroup": "",
"Links": [
"/mysqld:/wordpress/db"
],
浏览器访问测试
习题三
docker 容器数据卷的应用:在opt目录下创建一个t1目录,然后启动nginx:latest 镜像并将创建的目录作为这个的数据卷,
[root@localhost ~]# mkdir /opt/t1
[root@localhost ~]# docker run -itd --name=nginx -p 81:81 --restart=always -v /opt/t1/ docker.io/nginx:latest
9b0ae5a58d555e3e221a783ef739db1c201e531463b78a720d91eff04d6c7c4e
[root@localhost ~]# docker ps //查看运行状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b0ae5a58d55 docker.io/nginx:latest "/docker-entrypoin..." 22 seconds ago Up 21 seconds 80/tcp, 0.0.0.0:81->81/tcp nginx
[root@localhost ~]# docker inspect 9b0ae5a58d55 //查看容器的状态
{ 如下所示
"Volumes": {
"/opt/t1/": {}
},
-v /opt/t1 //这样是当成数据卷
-v /opt/t1:/opt //这样是映射对应的目录,映射的目录具有同步性
ro 只读
rw 可读可写
使用方法:/opt/t1:/opt/:ro
习题四
docker网络的应用:启动nginx:latest镜像,运行成一个无网络环境的容器,然后使用inspect命令查看容器网络的信息
[root@localhost /]# docker run -itd --name=nginx -p 80:80 --restart=always --network=none nginx:latest
dfe0cfbb2671d92e526fd763d4cf617816eedbceef6c1d57d42c796bc3e99061
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dfe0cfbb2671 nginx:latest "nginx -g 'daemon ..." 2 seconds ago Up 1 second nginx
[root@localhost /]# docker inspect dfe0cfbb2671
......
"Networks": {
.....
"Gateway": "",
"IPAddress": "",
......
}
习题五
docker新增网桥应用:新增一个名称为test的网桥,设置改网桥的地址段为:192.168.2.0/24 ,网关设置为192.168.2.10,设置好了以后进行启动,然后启动nginx:latest镜像,启动的时候将新创建的网桥应用该容器,然后使用inspect命令查看network信息
使用docker network rm 网桥的名称 //即可删除网桥
[root@localhost ~]# docker network ls //查看当前容器网络的情况
NETWORK ID NAME DRIVER SCOPE
aaa132f79527 bridge bridge local
8ba5941787ae host host local
50f0520ae9d0 none null local
如上所示,默认docker就存在三张网卡,镜像在启动的时候,如果不指定网络类型,那么默认是bridge类型
bridge(相当于虚拟机里面的nat网卡):默认会分配172.17.0.0/24网段里面的IP地址给容器,同时宿主机上也会存在一张docker0的网卡,该网卡就是这个网段的管理者,一般IP地址为172.17.0.1,同时这个IP地址也是所有容器的网关
host(相当于虚拟机里面的桥接网卡):使用该类型的容器,不会存在IP地址,会和宿主机的共享一张网卡的IP地址
none(无网络模式):不存在任何IP地址
[root@localhost ~]# docker network create --subnet 192.168.2.0/24 --gateway=192.168.2.1 test
8fe9af552342dff24a1c41c51398a95989d049362962faf3c5edd4140b5f3bb2
[root@localhost ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
aaa132f79527 bridge bridge local
8ba5941787ae host host local
50f0520ae9d0 none null local
8fe9af552342 test bridge local
默认创建的网卡类型默认也是bridge
[root@localhost ~]# docker run -itd --name=nginx -p 80:80 --restart=always --network=test nginx:latest
4834296d4575230dd0704c38e738ab0a5ce48ab233c8747a260291d8ca0dcf23
[root@localhost ~]# docker inspect 4834296d4575
"Gateway": "192.168.2.1",
"IPAddress": "192.168.2.2",
"IPPrefixLen": 24,
习题六
运行 mysql:8.0镜像,让数据库在后台运行,使用随机端口来进行映射,设置数据库的密码为123,运行完成以后,进入容器,任何登录数据库,任何创建一个名称test数据库,创建一个用户user1,设置密码为123,并把test的权限赋予test数据库
[root@localhost ~]# docker run -itd --name=mysqld -P -e MYSQL_ROOT_PASSWORD=123 --restart=always mysql:8.0
a753135d358bb1552021ed7bd1de3466635c462fa399a750f604cee54c035073
-P 随机端口 -p 指定端口 -e 设置启动时的环境变量 -d 代表后台运行
[root@localhost ~]# docker exec -it a753135d358b /bin/bash //进入容器
root@a753135d358b:/# mysql -uroot -p123
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> grant all privileges on test.* to 'user1'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql数据库创建用户并分配权限的应用
创建用户
localhost 代表本地,% 代表外网
create user '用户名'@'localhost 或者 % ' identified by '密码'
为用户分配权限
grant all privilgegs on '数据库名称 或者 *'.* to '用户名'@'localhost 或者 % ' identified by '密码'
习题七
运行mysql:8.0 镜像,将宿主机的/opt目录作为容器的数据卷,使用inspect只查询mysql容器里面的NetworkSettings内 Ports 信息,以及
Volumes卷组信息
[root@localhost ~]# docker run -itd --name=mysqld -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 -v /opt/ mysql:8.0
384e9e627e15062bef51559ba4d78f165d3ac4913f61094f16f1ed23d724b610
[root@localhost ~]# docker inspect -f "{{.NetworkSettings.Ports}}" b01b024ed65f
map[3306/tcp:[{0.0.0.0 3306}]]
[root@localhost ~]# docker inspect -f "{{.Config.Volumes}}" b01b024ed65f
map[/opt/:{} /var/lib/mysql:{}]
格式:docker inspect -f "{{.上一级.下一级}}" 容器ID号
习题八
使用centos:latest作为基础镜像,构建http服务,编写一个Dockerfile文件,要求使用本地yum源,暴露80端口
[root@localhost ~]# mkdir httpd
[root@localhost ~]# cd httpd/
[root@localhost httpd]# cp /etc/yum.repos.d/ * //复制yum到/opt目录下做一个备份
[root@localhost httpd]# vi Dockerfile //编辑dockerfile文件
FROM centos:latest
MAINTAINER ceshi
RUN rm -fv /etc/yum.repos.d/*
ADD *.repo /etc/yum.repos.d/
RUN yum install -y httpd
EXPOSE 80
CMD systemctl start httpd //*/
[root@localhost httpd]# docker build -t httpd:v1.0 . //运行 -t 指定镜像的名称 . (dockerfiel文件所在地)
[root@localhost httpd]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v1.0 23303d1e7cf7 34 seconds ago 315 MB
习题九
使用centos:latest作为基础镜像,准备好nginx源码包,编写一个dockerfile文件,要求暴露80端口
[root@localhost ~]# mkdir mydocker
[root@localhost ~]# cd mydocker/
[root@localhost mydocker]# wget http://nginx.org/download/nginx-1.19.2.tar.gz //下载源码包
[root@localhost mydocker]# vi Dockerfile //编写dockerfile文件
FROM centos:latest //指定基础镜像
MAINTAINER nginx //设置名称
ADD nginx-1.19.2.tar.gz /usr/local/src //复制并解压到指定目录
WORKDIR /usr/local/src/nginx-1.19.2 //切换目录
RUN useradd -s /sbin/nologin -M nginx //创建nginx用户
RUN yum install gcc gcc-c++ autoconf automake libtool make zlib zlib-devel openssl openssl-devel pcre* pcre-devel -y //解决依赖关系
RUN ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre && make && make install //编译安装过程
EXPOSE 80 //暴露80端口
CMD /usr/local/nginx/sbin/nginx //启动nginx
[root@localhost mydocker]# docker build -t nginx:v1.0 .
[root@localhost mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1.0 f65930928719 About a minute ago 466 MB
[root@localhost mydocker]# docker run -itd --name=nginx -p 80:80 nginx:v1.0 /usr/local/nginx/sbin/nginx -g "daemon off;"
注意这里一定要加/usr/local/nginx/sbin/nginx -g "daemon off;" 不然启动不了
[root@localhost mydocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d11e0fa420c nginx:v1.0 "/usr/local/nginx/..." 47 seconds ago Up 45 seconds 0.0.0.0:80->80/tcp nginx
习题十
docker 容器一些基本命令的用法
打包一个镜像
[root@localhost ~]# docker images //查看镜像列表
docker.io/nginx latest c39a868aad02 2 days ago 133 MB
[root@localhost ~]# docker save -o nginx_latest.tar c39a868aad02
用法:docker saver -o 打包的镜像名称 打包的镜像ID号
打包一个容器
[root@localhost ~]# docker ps //查看容器列表
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a753135d358b mysql:8.0 "docker-entrypoint..." 15 minutes ago Up 15 minutes 0.0.0.0:32768->3306/tcp mysqld
[root@localhost /]# docker export -o /opt/mysql_8.0.tar a753135d358b
[root@localhost /]# ll /opt/
总用量 336072
-rw-------. 1 root root 344136704 11月 14 13:53 mysql_8.0.tar
删除所有容器
[root@localhost ~]# docker rm -f $(docker ps -a -q)
删除所有镜像
[root@localhost ~]# docker rmi $(docker images -q)
查看容器的进程
[root@localhost ~]# docker top 容器ID号
查询容器的各项状态(如CPU 内存等信息)
[root@localhost ~]# docker stats 容器ID号
修改容器的名称
[root@localhost ~]# docker rename 旧名称 新名称