Docker 安装、优化

  1. yum 包更新到最新
  2. docker官网查找帮助文档:https://docs.docker.com/ ```shell

    首先卸载旧的docker

    sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \

    安装依赖环境

    sudo yum install -y yum-utils sudo yum-config-manager \ —add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

设置镜像的仓库默认为国外,我们设置为阿里云的

sudo yum-config-manager \ —add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker相关的程序

安装前更新yum源索引

sudo yum makechche fash

docker-ce表示社区版本,ee表示企业版的

sudo yum install docker-ce docker-ce-cli containerd.io

安装完成查看版本

docker —version

阿里云镜像加速

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-‘EOF’ { “registry-mirrors”: [“https://1rv6wrt6.mirror.aliyuncs.com“] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

Docker卸载

sudo yum remove docker-ce docker-ce-cli containerd.io

删除目录**/var/lib/docker(资源目录都在下边)

sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd

  1. <a name="1HJsP"></a>
  2. # 目录/var/lib/docker
  3. 修改Docker本地镜像与容器的存储位置的方法(最简单方便)
  4. ```powershell
  5. #首先停掉Docker服务:
  6. systemctl stop docker
  7. #然后移动整个/var/lib/docker目录到目的路径
  8. mv /var/lib/docker /home/docker
  9. #建立软连接
  10. ln -s /home/docker /var/lib/docker
  11. #如果是删除的话就需要删除安装的目录后再次创建软连接
  12. rm -rf /var/lib/docker
  13. ln -s /home/docker /var/lib/docker
  14. #重启docker

Docker创建容器常用命令

ctrl + p+q :容器不停止退出

进阶命令

  1. docker run -d centos -d 容器使用后台运行,容器启动后发现自己没有服务就会自动停止
  2. docker logs -f -t --tail 10 id 查看最近的10条日志 -f动态显示,-t 时间戳
  3. docker top 命令 显示,查看容器中的进程
  4. docker inspect ID 查看容器的详细信息

docker run [可选参数] image

--name="NAME"
-d                                    后台运行
-i                                     使用交互方式,进入容器
-p                 指定容器端口
-P     指定随机端口

进入当前正在运行的容器

docker exec -it 容器ID  /bin/bash      进入后开启一个新的终端
docker attach  容器ID   进入到正在执行的命令终端,不会启动新的

文件拷贝

从容器内拷贝文件到主机内
docker cp 容器ID:/home/text.java      /home/app
docker run -it  --rm tomcat:9.0   --rm的作用为:用完就删除
docker exec -it tomcat01 /bin/bash  进入正处再运行的容器中
docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
--net somenetwork:配置网络使用
添加内存限制:-e添加环境参数配置修改 ES_JAVA_OPST="-Xms64m -Xmx512m"
docker stats :查看cpu的状态

Portainer,Rancher可视化工具(docker)
docker run -d -p 3344:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock  --privileged=true portainer /portainer

如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数
—privileged=true 来解决挂载的目录没有权限的问题

Docker网络

ip addr命令查看看网卡docker0网卡

8: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:e4:92:48:48 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:e4ff:fe92:4848/64 scope link
       valid_lft forever preferred_lft forever

实验

docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat
#-d 后台 -P 随机端口映射 

docker exec -it tomcat01/ tomcat01 ip addr
#显示结果:
58: eth0@if59: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
60: eth0@if61: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
#看到默认的网卡为172.17.0.2/172.17.0.3
容器之间可以相互ping使用IP,但是名称不可以

—link(不推荐使用)

docker run -d -P tomcat03 --link tomcat01
这样的话tomcat03可以ping通tomcat01,反之不能,docker0网卡不支持名称访问
—link就是在虚拟机的host文件中添加了解析

docker network 命令 —help

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks
docker network inspect a2dca5799b77(网卡id)
#默认使用的是bridge网卡,172.17.0.1 docker0
"Containers": {
            "7fbc67821b271a2ea9b6b81cddb915f39c1cdefe3be582bc106ee20ae769a1aa": {
                "Name": "tomcat01",
                "EndpointID": "6df2108741698006dea724d5d66568da471f30d4a2cccaef416918dba25f45fa",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "d91770453bf5ecc1c69c43e2edece7c8bc2d3c4596101d0736cb990f61181898": {
                "Name": "tomcat02",
                "EndpointID": "faaf9e4eb6dddbacfa254b51e61e5bd952492c010f3252f67934f2807cd94e6b",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },

自定义网络互联

docker network ls

NETWORK ID     NAME      DRIVER    SCOPE
a2dca5799b77   bridge    bridge    local
0ecd182ec6cb   host      host      local
35c6f8d55f55   hyfnet    bridge    local
af8068e7a1ab   none      null      local
  1. bridge 桥接模式
  2. none 不配置网络,自己定
  3. host 主机模式,和宿主机共享网络
  4. container 容器内网络连通

    测试:

    #测试
    docker run -d -P --name romcat03 --net birdge (--ip 192.168.0.1)tomcat
    #自定义一个网络
    docker network create --help
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 hyfnet
    

    connect 连接一个容器到一个网络

    ```shell docker network connect—help

Usage: docker network connect [OPTIONS] NETWORK CONTAINER Connect a container to a network Options: —alias strings Add network-scoped alias for the container —driver-opt strings driver options for the network —ip string IPv4 address (e.g., 172.30.100.104) —ip6 string IPv6 address (e.g., 2001:db8::33) —link list Add link to another container —link-local-ip strings Add a link-local address for the container

依照命令为:

docker network connect hyfnet tomcat01

连通后就是把tomcat01 放到了hfynet下,tomcat01中多了一张网卡

[root@nysql ~]# docker exec -it tomcat01 ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 58: eth0@if59: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever 66: eth1@if67: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:c0:a8:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.0.4/24 brd 192.168.0.255 scope global eth1 valid_lft forever preferred_lft forever

<a name="1C0Mi"></a>
# SpringBoot微服务打包Docker
<a name="jd6wu"></a>
#### 项目打包

- 将打包好的jar拷贝,本地测试,成功后

`java -jar demo-springboot.jar`

- 编写docker file
```shell
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT["java","-jar","/app.jar"]
  • 拷贝文件和DockerFile文件到服务器后
    • docker build -t hyfSpringBoot .
  • 运行
    • docker run -d -P --name text01 hyfSpringBoot
  • CURL测试完成