docker使用笔记

438 阅读5分钟

docker使用笔记

安装docker

系统环境:centos7.0

#安装docker
yum install docker
#启动docker
systemctl start docker
systemctl status -l docker.service
#查看docker版本信息
docker version
#设置docker开机启动
systemctl enable docker.service

安装完后默认启动不了,需要修改/etc/sysconfig/docker文件,改为:--selinux-enabled=false

#docker安装mysql
docker pull mysql
#查看本地docker镜像
docker images

安装docker-compose

#下载安装docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#添加目录权限
sudo chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version

docker pull下来的镜像保存地址:/var/lib/docker

docker升级

#列出docker已安装列表
yum list installed | grep docker 
#删除服务,docker-client.x86_64为列出的安装列表,正常有好几个服务
yum remove docker-client.x86_64
#安装新版docker-ce
sudo yum install -y docker-ce

卸载docker 安装docker ce

1.在CentOS上设置Docker CE存储库:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
2.安装docker-ce版:
sudo yum install -y docker-ce
3.启动docker:
sudo systemctl enable docker
sudo systemctl start docker
注意:如果之前有使用yum安装过非ce版,需要先清理掉docker-selinux才可安装成功:
sudo yum erase -y docker-client.x86_64
sudo yum erase -y docker-common.x86_64
sudo yum remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine
清理完成后重复第2步即可
centos8安装docker
#下载docker-ce的repo
#http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
#安装依赖(这是相比centos7的关键步骤)
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
#安装docker-ce
yum install docker-ce
#启动docker
systemctl start docker

配置阿里云镜像仓库:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://msjp9kko.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker使用

docker使用的版本信息

root@wangchaojun /]# docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:48:22 2018
 OS/Arch:           linux/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:19:08 2018
  OS/Arch:          linux/amd64
  Experimental:     false

docker常用命令

docker ps -a 显示所有正在运行或者停止的容器  每个容器都存在一个唯一id   
docker attach 容器id  可以进入一个进入后台进程的容器
docker stop 容器id  关闭一个容器
docker start  容器id  重启一个容器
docker exec 容器id 命令,在一个运行容器中执行一个命令,结合it进入shell界面后 exit退出 容器是不会退出的
docker rm 容器id  删除一个创建的容器
docker rmi 镜像d  删除一个镜像 删除前确定该镜像下没有容器
docker logs 容器ID 查看容器日志
docker inspect 容器id 查看容器的详细 信息 比如查询进程id    docker  inspect 容器id | grep Pid

#查看容器命令
docker ps -a --no-trunc

#删除所有容器
docker rm $(docker ps -aq)
#停止所有容器
docker rm $(docker ps -aq)

#启动所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker run命令参数

​ docker run  [可选参数] 镜像名称 【进入仓库后执行命令】运行某个镜像 运行后的镜像就是容器 就是进程的容器

--name 名称 指定容器名称  比如 docker run --name mycentos centos 表示运行一个为mycentos的centos仓库
-t 表示打开一个伪中断  其实centos仓库就是一个精简的centos系统
-i 表示持续打开输入流 用户可以输入命令 比如 打开一个容器之后 能够与用户交互 docker run -it centos进入伪终端后exit命令退出
-p 可以进行端口映射当访问主机的端口自动映射到docker容器的某个端口,比如映射到docker的nginx  docker  run -p 1122:80 nginx  其他机器 访问 http://主机:1122自动访问docker容器的80端口
-d 表示启动容器直接进入后台模式  daemon  一般如果容器中没有任何程序进程 一般直接退出
-v 将主机的某个目录映射到 docker容器的某个目录,比如 docer run  -it -v /data:/data1 centos  表示主机的/data和容器的/data1目录互相挂载 文件修改都会影响两个目录 可以用户传文件
-h  指定容器的主机的主机名 

运行tomcat镜像:-d是指后台运行,-p 将容器的8080端口映射到主机的18080端口,tomcat为容器名。

docker run -d -p 18080:8080 tomcat

docker 进入tomcat docker镜像,e02c7780ecf3为tomcat镜像Id

docker exec -it e02c7780ecf3 /bin/bash

1、打包docker镜像

docker save -o gitlab-ce.tar gitlab/gitlab-ce 

会在当前目录下生成导出文件gitlab-ce.tar,然后将此文件下载到本地

2、导入docker镜像

docker load -i gitlab-ce.tar

3、容器的导入导出

docker export pid > centos_container.tar
docker import centos_container.tar centos:latest
docker ps // 查看所有正在运行容器
docker stop containerId // containerId 是容器的ID
docker ps -a // 查看所有容器
docker ps -a -q // 查看所有容器ID
docker stop $(docker ps -a -q) //  stop停止所有容器
docker  rm $(docker ps -a -q) //   remove删除所有容器

docker与主机间文件复制:

--从主机复制到容器 
docker cp host_path containerID:container_path
--从容器复制到主机
docker cp containerID:container_path host_path

gitlab还原git库

gitlab-rake gitlab:import:repos["/host/docker/gitlab_data"]

docker安装常用软件

#安装mysql镜像
docker pull mysql
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d be0dbf01a0f3

#docker 安装zookeeper
docker pull zookeeper
docker run --name zookeeper -p 2181:2181 -d zookeeper

#docker安装Oracle
docker pull sath89/oracle-12c
docker run --name oracle -p8080:8080 -p 1521:1521 -d ee3351d51185
docker exec -it 81aa4756538a
#修改登录权限
ALTER SYSTEM DISABLE RESTRICTED SESSION;
#使用此镜像创建的oracle用户和密码: systme/oracle|sys/oracle
#sid: xe      service name: xe

#docker安装 nginx
docker pull nginx
docker run --name nginx -p 80:80 -d 2622e6cca7eb
docker exec -it 47859972c5d3 /bin/bash

#docker安装redis镜像
docker pull  redis
#运行镜像
docker run -p 6379:6379 --name redis -d 33c654ea77ff
# -p 6379:6379 : 将容器的6379端口映射到主机的6379端口
# redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

#安装redis集群
docker pull grokzen/redis-cluster
docker run  -e "IP=0.0.0.0" -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 -p 7005:7005 -d grokzen/redis-cluster:latest


#docker安装zookeeper
docker pull zookeeper
docker run --name zookeeper01 -p 12181:2181 -d 8eccc77fd8d0

#docker安装mongo
docker run --name mongo -p 27017:27017 -d mongo

#docker安装nacos
docker pull nacos/nacos-server
docker run -d -p 8848:8848 -e MODE=standalone -v /opt/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /opt/docker/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server

#安装sentinel,访问dashboard 地址:http://localhost:8858,账号密码都为:sentinel
docker pull bladex/sentinel-dashboard
docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard

#skywalking-oap-server
   #服务端
docker pull apache/skywalking-oap-server
docker run --name skywalking -d -p 1234:1234 -p 11800:11800 -p 12800:12800 --restart always apache/skywalking-oap-server
docker pull elastichq/elasticsearch-hq

#客户端
docker pull apache/skywalking-ui 
docker run --name skywalking-ui -d -p 18080:8080 --link skywalking:skywalking -e SW_OAP_ADDRESS=skywalking:12800 --restart always apache/skywalking-ui

docker pull postgres
docker pull sonarqube

docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=1 --name postgres postgres
docker run -d -p 9000:9000 -e "SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.138.128:5432/sonar" -e "SONARQUBE_JDBC_USERNAME=postgres" -e "SONARQUBE_JDBC_PASSWORD=1" --name sonarqube sonarqube

docker安装 nginx

docker安装zabbix

version: '2'
services:
  zabbix-server:
    image: zabbix/zabbix-3.0:3.0.0
    container_name: zabbix-server
    network_mode: "bridge"
    restart: always
    ports:
      - "8888:80"
      - "10051:10051"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ZS_DBHost=192.168.0.131
      - ZS_DBPort=13306
      - ZS_DBUser=root
      - ZS_DBPassword=root

保存为:docker-compose.yml文件,同目录下执行下面命令,构建docker

docker-compose up -d

docker 安装nacos

$ docker pull nacos/nacos-server

添加配置文件/opt/nacos/init.d/custom.properties内容如下

management.endpoints.web.exposure.include=*

使用standalone模式并开放8848端口,并映射配置文件和日志目录,数据库默认使用 Derby

$ docker run -d -p 8848:8848 -e MODE=standalone -v /opt/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /opt/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server

docker 安装pinpoint

git clone https://github.com/naver/pinpoint-docker.git
cd Pinpoint-Docker
docker-compose pull && docker-compose up -d

安装zookeeper

[root@MiWiFi-R4AC-srv ~]# 

常用镜像启动命令

docker run -d -p 8500:8500 consul
systemctl start docker
systemctl status -l docker.service
docker run --detach --hostname 192.168.1.120 --publish 8443:443 --publish 80:80 
     --publish 2222:22 --name gitlab  --volume /opt/gitlab/etc:/etc/gitlab 
     --volume /opt/gitlab/logs:/var/log/gitlab --volume /opt/gitlab/data:/var/opt/gitlab      --volume /host:/host beginor/gitlab-ce#
docker run -p 80:80 --name wcj_nginx -v /opt/nginx/www:/www 
   -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf --privileged=true 
   -v /opt/nginx/logs:/wwwlogs  -d nginx
docker run -p 80:80 --name wcj_nginx -v /opt/nginx/www:/usr/share/nginx/html  
   -v /opt/nginx/logs:/var/log/nginx  -d nginx
docker run -d -p 1521:1521 -v /opt/oracle:/u01/app/oracle/ --name xe sath89/oracle-12c
docker run -d -p 6379:6379 redis
docker run -d -p 8080:8080 tomcatsystemctl stop docker
systemctl status -l docker.service

常见问题:

#启动docker报错:Error response from daemon: driver failed programming external connectivity on endpoint mysql (3c78460ea397938486768f9b5431726b35f7d1d9386f2a5e9a55d41989cfcb18):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 13306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
重启docker:systemctl restart docker



docker安装ping命令

apt-get update
apt install net-tools       # ifconfig 
apt install iputils-ping     # ping
apt-get install  telnet #telnet

docker 安装mysql

镜像:docker.io/library/mysql

启动要加上设置root密码的参数:MYSQL_ROOT_PASSWORD    

docker与主机交互

#主机中的go1.17.7.linux-amd64.tar.gz复制到spug容器的/opt目录下
[root@MiWiFi-R4A-srv go]# podman cp go1.17.7.linux-amd64.tar.gz spug:/opt