习题一

配置docker容器的镜像加速器,使得在下载镜像的可以进一步的提速

自行先登录注册登录到阿里云(每一个账号对应一个加速通道)

docker填空题 docker试题_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填空题 docker试题_运维_02


习题三

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 旧名称 新名称