Saga Migrării de WordPress – Acomodarea cu Docker

5 min read
De pe Le blog de Laurel

Iată a doua postare din Saga Migrării de WordPress, o serie care prezintă migrarea unui website WordPress deja existent pe un alt host, în Docker.

În această postare vom parcurge o serie de comenzi în Docker, pentru a ne familiariza puțin cu genul acesta de mediu de lucru.

Pentru a afla contextul în care a trebuit să fac migrarea și condițiile prealabile pentru acest gen de migrare, citește mai întâi prima parte, Începuturile.

Să instalăm Docker pe server. Mai jos sunt instrucțiunile pentru Linux, mai multe detalii pentru diverse sisteme de operare se găsesc la Docker Engine.

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Să instalăm Docker Compose pe server. Vezi Install Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

Dacă nu vrei să folosești docker pentru orice comandă de docker elevată, poți adăuga user-ul la grupul docker. Vezi Post-installation steps for Linux

sudo groupadd docker
sudo usermod -aG docker myuser
su - myuser
id -nG

Acum că am instalat Docker, să rulăm câteva comenzi, să începem să cunoaștem Docker. O listă vastă de comenzi este accesibilă aici.

Dacă vrem să lansăm un container, trebuie să rulăm următoarea comandă:

# docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Comanda de mai sus tocmai a pornit primul tău container Docker. 🙂

Acum poți enumera toate containerele Docker cu ps -a, sau doar un anumit număr folosind ps -n 7 și poți obține informații despre ele folosind primele caractere ale id-ului container-ului și inspect sau logs.

# list all containers
docker ps -a
# list first n containers
docker ps -n 7
# show information about container
docker inspect a8d
# view logs
docker logs a8d

Poți schimba numele unui container folosind rename, și te poți conecta la un container folosind exec.

# rename
docker rename nervous_babbage other_name
# run the container and detach it
docker run -d a8d
# run a command in container
docker exec a8d ps
# start interactive and allocate a pseudo-tty
docker exec -it a8d bash

Oprirea și îndepărtarea container-ului:

# stop
docker stop a8d
# remove
docker rm a8d
# delete all stopped containers
docker rm $(docker ps -a -q)

Containerele, ca și cu git și GitHub, pot fi puse sub versionare, iar schimbările pot fi trimise către Docker Hub, în depozite publice (sau depozite private cu plată).

Alte comenzi:

# create and copy file
touch testfile
docker container cp testfile unruffled_snyder:/opt
# show difference
docker diff a8d
# run with different options and args
docker container run -idt -P nginx
docker container run -idt -p 8888:80 nginx
docker container run -idt --name ghost -p 3001:2368 ghost:alpine
# list images
docker images
docker image history ghost:alpine
# pull images
docker pull ubuntu
docker pull centos
# run multiple containers
docker container run -idt --name dev-ubuntu --net host ubuntu bash
docker container run -idt --name dev-centos --net host centos bash
# list multiple containers
docker ps -n 2
# connect to container and install vim
docker exec -it dev-ubuntu bash
ps aux
apt-get update
apt-get install vim
touch /opt/myfile
# stop and start
docker stop dev-ubuntu dev-centos
docker start dev-ubuntu
# connect again and verify vim is installed
docker exec -it dev-ubuntu bash
which vim
# remove
docker rm dev-ubuntu
# create volume
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
# commit changes
docker ps -l
docker diff a8d
docker container commit image_name hubuser/reponame:v2
docker image ls
docker image history a8d
docker login
docker image push hubuser/reponame:v2
# checkout, run and push
cd reponame/
git checkout docker
ls
docker image build -t hubuser/reponame:v3 .
docker image ls
docker image history hubuser/reponame:v3
docker container run -idt -P hubuser/reponame:v3
docker ps
docker image push hubuser/reponame:v3

Dar Docker Compose? Într-un director de test, creează un fișier YAML denumit docker-compose.yml, și rulează docker-compose up pentru a porni și rula aplicația, cu opțiunea -d pentru a o detașa și a rula pe fundal.

version: '3.7' 

networks:
    webserver-test:

services:

    my_webserver:
        image: nginx:1.15.12-alpine
        container_name: my_webserver
        restart: unless-stopped
        ports:
            - "1234:80"
        volumes:
            - my_html:/usr/share/nginx/html
        networks:
            - webserver-test
volumes:
    my_html:
# run in detached mode, pull the needed Docker images, and start the containers
myuser@host:~/test$ docker-compose up -d
Creating network "test_webserver-test" with the default driver
Creating volume "test_my_html" with default driver
Creating my_webserver ... done
# list services, watch logs
myuser@host:~/test$ docker-compose ps
    Name             Command          State          Ports        
------------------------------------------------------------------
my_webserver   nginx -g daemon off;   Up      0.0.0.0:1234->80/tcp
myuser@host:~/test$ docker-compose logs
Attaching to my_webserver
# stop
myuser@host:~/test$ docker-compose stop
Stopping my_webserver ... done
# remove the containers and default network, but preserve your data
myuser@host:~/test$ docker-compose down
Removing my_webserver ... done
Removing network test_webserver-test
# remove the containers, default network, and the data
myuser@host:~/test$ docker-compose down --volumes
Removing network test_webserver-test
WARNING: Network test_webserver-test not found.
Removing volume test_my_html

Alte comenzi utile pentru dezvoltare și testare. Dacă ai creat tot felul de containere în scop de testare, acum este timpul să cureți host-ul, înainte de a începe munca reală. Nu folosi comenzile acestea după ce ai creat website-urile, totuși!

docker stop $(sudo docker ps -a -q)
docker rm $(sudo docker ps -a -q)
docker volume rm $(sudo docker volume ls -q)
docker network prune
service docker restart

Poți testa comenzile Docker și online, folosind Play with Docker.

De pe Le blog de Laurel

În următoarea postare, Ghid pas cu pas pentru Ubuntu 18.04, vom vedea pas cu pas cum se poate face migrarea unui website WordPress deja existent în Docker pe Linux.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *