实验环境

Centos7 VirtualBox6安装CentOS-7-x86_64-Minimal-2009.iso
Electerm1.2 ssh工具

安装Docker最新版

  1. yum install -y yum-utils
  2. yum-config-manager \
  3. --add-repo \
  4. https://download.docker.com/linux/centos/docker-ce.repo
  5. yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成提示如下,表示成功

  1. Installed:
  2. containerd.io.x86_64 0:1.6.6-3.1.el7 docker-ce.x86_64 3:20.10.17-3.el7 docker-ce-cli.x86_64 1:20.10.17-3.el7
  3. docker-compose-plugin.x86_64 0:2.6.0-3.el7
  4. Dependency Installed:
  5. audit-libs-python.x86_64 0:2.8.5-4.el7 checkpolicy.x86_64 0:2.5-8.el7
  6. container-selinux.noarch 2:2.119.2-1.911c772.el7_8 docker-ce-rootless-extras.x86_64 0:20.10.17-3.el7
  7. docker-scan-plugin.x86_64 0:0.17.0-3.el7 fuse-overlayfs.x86_64 0:0.7.2-6.el7_8
  8. fuse3-libs.x86_64 0:3.6.1-4.el7 libcgroup.x86_64 0:0.41-21.el7
  9. libsemanage-python.x86_64 0:2.5-14.el7 policycoreutils-python.x86_64 0:2.5-34.el7
  10. python-IPy.noarch 0:0.75-6.el7 setools-libs.x86_64 0:3.3.8-4.el7
  11. slirp4netns.x86_64 0:0.4.3-4.el7_8
  12. Complete!
  1. systemctl start docker
  2. docker -v
  3. Docker version 20.10.17, build 100c701 #显示docker版本信息,表示安装成功。

叁考来源https://docs.docker.com/engine/install/centos/

  1. sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo #将docker-ce.repo配置文件中的域名全部替换

参考来源https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.e9cc1b11rVTkGt

常用命令

  1. #命令后面跟--help,查看相应帮助信息
  2. docker images #查看所有镜像 -a -qa
  3. docker search #搜索镜像 --limit
  4. docker pull #下载镜像 [:tag]
  5. docker system df #查看镜像、容器、卷、缓存等所点空间
  6. docker rmi #删除镜像 -f
  7. docker rmi $(docker images -qa) #删除全部镜像,续传
  1. #ubuntu没有官方发布版本,需要加对应namespace
  2. docker pull centos
  3. #run启动交互式容器操作,进到入centos的shell中,
  4. #exit退出,容器也会退出。
  5. #ctrl+p+q退出,容器会保留运行,按到q直接退出electerm,未完成验证
  6. docker run -it centos /bin/bash
  7. #进入到已运行的容器内
  8. docker exec -it f67a6f8aef28 /bin/bash
  9. #进入到已运行的容器,退出会自动退出容器
  10. docker attach f67a6f8aef28
  11. #守护式进程启动容器
  12. docker run -d redis
  13. #查看容器更多信息
  14. docker inspect f67a6f8aef28
  15. #查看日志
  16. docker logs f67a6f8aef28
  17. #查看容器的进程情况
  18. docker top f67a6f8aef28
  19. #从容器内备份文件
  20. docker cp f67a6f8aef28:/tmp/a.txt /tmp/b.txt
  21. #备份整个容器
  22. docker export 0b891f076876 >abcd.tar
  23. #从备份导入为镜像:命名空间/镜像名:版本号
  24. cat abcd.tar | docker import - vsan/centos:8.0
  1. docker run -it --name=c1 -v /temp/hostdata:/tmp/

提交容器副本成为一个新镜像

  1. #先交互式运行一个容器
  2. docker run -it centos:8.0 /bin/bash
  3. #在容器里增加新功能,安装vim,使用yum或dnf,dnf是yum的升级版,没配置成功安装源,忽略
  4. ……
  5. #提交新镜像
  6. docker commit -m "xxx" -a "author" id image_name:v

创建一个私服库registry

  1. #下载官方镜像
  2. docker pull registry
  3. #默认仓库被创建在/var/lib/registry目录下
  4. docker run -d -p 5000:5000 --privileged=true registry
  5. #检查私服库是否正常,返回 {"repositories":[]}表示暂无镜像
  6. curl -XGET http://192.168.0.60:5000/v2/_catalog
  7. #push镜像前,先把镜像改为成符合私服要求的命名空间
  8. docker tag redis 192.168.0.60:5000/myredis:latest
  9. #直接push不成功,拒绝http连接
  10. docker push 192.168.0.60:5000/myredis
  11. #配置/etc/docker/deamon.json文件,增加"insecure-registries": ["192.168.0.60:5000"]
  12. mkdir -p /etc/docker
  13. tee /etc/docker/daemon.json <<-'EOF'
  14. {
  15. "registry-mirrors": ["https://4oge1oqg.mirror.aliyuncs.com"],
  16. "insecure-registries": ["192.168.0.60:5000"]
  17. }
  18. EOF
  19. systemctl daemon-reload
  20. systemctl restart docker
  21. #重复上述部分命令,当push时出现进度条表示正在上传,返回镜像id,说明上传成功
  22. curl -XGET http://192.168.0.60:5000/v2/_catalog
  23. #返回{"repositories":["myredis"]},表示上传成功
  24. #再取回来使用
  25. docker pull 192.168.0.60:5000/myredis

数据持久化及拓展权限

#-v 挂载卷;--privileged=true 拓展权限 可以增加多个v
docker run -it -d --privileged=true -v /hostdir:/dockerdir --name r1 xxx 
#--volumes-from xxx 继承其它容器的挂载卷
docker run -it -d --volumes-from r1 --name r2 xxx
#查看r2容器的细节,比如核实mount部分是否与r1一致
docker inspect r2

软件安装

docker search tomcat
dokcer pull tomcat
docker run --name t1 -d -p 8080:8080 tomcat #访问8080提示报错,因为webapps里没内容
docker exec -it t1 /bin/bash #进入容器
root@fedeffce2873:/usr/local/tomcat# ls -l
root@fedeffce2873:/usr/local/tomcat# rm -rf webapps
root@fedeffce2873:/usr/local/tomcat# mv webapps.dist webapps
ps -ef | grep mysql  #查看宿主机是否已安装mysql
docker pull mysql:5.7 #下载官方镜像
docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 #启动mysql
docker exec -it mysql57 /bin/bash
mysql -uroot -p #连接mysql
#mysql基础命令
show databases;
create database db01;
use db01;
create table t1(id int,name varchar(20));
insert into t1 values(1,'z3');
select * from t1;
insert into t1 values(2,'王五');#中文报错
show variables like 'character%';#查看编码
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
#实用版启动mysql
docker run -d -p 3306:3306 --privileged=true \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql57 \
mysql:5.7

vi /data/mysql/conf/my.cnf
[client]

default-character-set=utf8

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

#不重启容器,直接查看字符集
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
#重启容器后,字符集正常
docker restart mysql57
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
#正常写入中文
mysql> select * from t1;
+------+--------+
| id   | name   |
+------+--------+
|    1 | z3     |
|    2 | 王五   |
+------+--------+
2 rows in set (0.00 sec)
docker run -d -p 6379:6379 --name redis redis:6.0.8
docker exec -it redis /bin/bash
root@d87ab9a25082:/data# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> 
#在宿主机建目录保存redis配置文件
mkdir -p /app/redis #-p 自动建不存在的父目录
cd /app/redis
#参考配置文件:https://github.com/redis/redis/blob/6.0/redis.conf
vi redis.conf #仅做1、2步,快速在编辑器里查找:/key return
#1、#bind 127.0.0.1  允许外部连接
#2、daemonize no  避免与-d冲突
#3、appendonly yes  数据持久化
#4、requirepass 123 开启连接密码
#5、protected-mode no 保护模式关闭

#实用启动redis
docker run -d -p 6379:6379 --privileged=true \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
--name redis6 \
redis:6.0.8 \
redis-server /etc/redis/redis.conf

root@d3f9118952a7:/data# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 16
(error) ERR DB index is out of range
#修改配置文件中的databases 16,重启是否生效
[root@learning01 redis]# docker restart redis6
redis6
[root@learning01 redis]# docker exec -it redis6 /bin/bash
root@d3f9118952a7:/data# redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 15
(error) ERR DB index is out of range