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